成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例

使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例

熱門標(biāo)簽:澳門防封電銷卡 賺地圖標(biāo)注的錢犯法嗎 福州鐵通自動(dòng)外呼系統(tǒng) 長(zhǎng)沙ai機(jī)器人電銷 濮陽(yáng)自動(dòng)外呼系統(tǒng)代理 烏魯木齊人工電銷機(jī)器人系統(tǒng) 地圖標(biāo)注測(cè)試 廣東語(yǔ)音外呼系統(tǒng)供應(yīng)商 智能電銷機(jī)器人營(yíng)銷

今天介紹如何用 Go 語(yǔ)言創(chuàng)建 WebSocket 服務(wù),文章的前兩部分簡(jiǎn)要介紹了 WebSocket 協(xié)議以及用 Go 標(biāo)準(zhǔn)庫(kù)如何創(chuàng)建 WebSocket 服務(wù)。第三部分實(shí)踐環(huán)節(jié)我們使用了 gorilla/websocket 庫(kù)幫助我們快速構(gòu)建 WebSocket 服務(wù),它幫封裝了使用 Go 標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn) WebSocket 服務(wù)相關(guān)的基礎(chǔ)邏輯,讓我們能從繁瑣的底層代碼中解脫出來(lái),根據(jù)業(yè)務(wù)需求快速構(gòu)建 WebSocket 服務(wù)。

Go Web 編程系列的每篇文章的源代碼都打了對(duì)應(yīng)版本的軟件包,供大家參考。公眾號(hào)中回復(fù) gohttp10 獲取本文源代碼

WebSocket介紹

WebSocket 通信協(xié)議通過單個(gè) TCP 連接提供全雙工通信通道。與 HTTP 相比, WebSocket 不需要你為了獲得響應(yīng)而發(fā)送請(qǐng)求。它允許雙向數(shù)據(jù)流,因此您只需等待服務(wù)器發(fā)送的消息即可。當(dāng) Websocket 可用時(shí),它將向您發(fā)送一條消息。 對(duì)于需要連續(xù)數(shù)據(jù)交換的服務(wù)(例如即時(shí)通訊程序,在線游戲和實(shí)時(shí)交易系統(tǒng)), WebSocket 是一個(gè)很好的解決方案。 WebSocket 連接由瀏覽器請(qǐng)求,并由服務(wù)器響應(yīng),然后建立連接,此過程通常稱為握手。 WebSocket 中的特殊標(biāo)頭僅需要瀏覽器與服務(wù)器之間的一次握手即可建立連接,該連接將在其整個(gè)生命周期內(nèi)保持活動(dòng)狀態(tài)。 WebSocket 解決了許多實(shí)時(shí) Web 開發(fā)的難題,并且與傳統(tǒng)的 HTTP 相比,具有許多優(yōu)點(diǎn):

  1. 輕量級(jí)報(bào)頭減少了數(shù)據(jù)傳輸開銷。
  2. 單個(gè)Web客戶端僅需要一個(gè)TCP連接。
  3. WebSocket服務(wù)器可以將數(shù)據(jù)推送到Web客戶端。

WebSocket協(xié)議實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單。它使用 HTTP 協(xié)議進(jìn)行初始握手。握手成功后即建立連接, WebSocket 實(shí)質(zhì)上使用原始 TCP 讀取/寫入數(shù)據(jù)。

客戶端請(qǐng)求如下所示:

GET /chat HTTP/1.1
 Host: server.example.com
 Upgrade: websocket
 Connection: Upgrade
 Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
 Sec-WebSocket-Protocol: chat, superchat
 Sec-WebSocket-Version: 13
 Origin: http://example.com

這是服務(wù)器響應(yīng):

HTTP/1.1 101 Switching Protocols
 Upgrade: websocket
 Connection: Upgrade
 Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
 Sec-WebSocket-Protocol: chat

如何在Go中創(chuàng)建WebSocket應(yīng)用

要基于Go 語(yǔ)言內(nèi)置的 net/http 庫(kù)編寫 WebSocket 服務(wù)器,你需要:

  • 發(fā)起握手
  • 從客戶端接收數(shù)據(jù)幀
  • 發(fā)送數(shù)據(jù)幀給客戶端
  • 關(guān)閉握手

發(fā)起握手

首先,讓我們創(chuàng)建一個(gè)帶有 WebSocket 端點(diǎn)的 HTTP 處理程序:

// HTTP server with WebSocket endpoint
func Server() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
   ws, err := NewHandler(w, r)
   if err != nil {
     // handle error
   }
   if err = ws.Handshake(); err != nil {
    // handle error
   }
  …

然后初始化 WebSocket 結(jié)構(gòu)。

初始握手請(qǐng)求始終來(lái)自客戶端。服務(wù)器確定了 WebSocket 請(qǐng)求后,需要使用握手響應(yīng)進(jìn)行回復(fù)。

請(qǐng)記住,你無(wú)法使用 http.ResponseWriter 編寫響應(yīng),因?yàn)橐坏╅_始發(fā)送響應(yīng),它將關(guān)閉其基礎(chǔ)的 TCP 連接(這是 HTTP 協(xié)議的運(yùn)行機(jī)制決定的,發(fā)送響應(yīng)后即關(guān)閉連接)。

因此,您需要使用 HTTP 劫持( hijack )。通過劫持,可以接管基礎(chǔ)的 TCP 連接處理程序和 bufio.Writer 。這使可以在不關(guān)閉 TCP 連接的情況下讀取和寫入數(shù)據(jù)。

// NewHandler initializes a new handler
func NewHandler(w http.ResponseWriter, req *http.Request) (*WS, error) {
  hj, ok := w.(http.Hijacker)
  if !ok {
   // handle error
  }     .....
}

要完成握手,服務(wù)器必須使用適當(dāng)?shù)念^進(jìn)行響應(yīng)。

// Handshake creates a handshake header
 func (ws *WS) Handshake() error {

  hash := func(key string) string {
   h := sha1.New()
   h.Write([]byte(key))
   h.Write([]byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))

  return base64.StdEncoding.EncodeToString(h.Sum(nil))
  }(ws.header.Get("Sec-WebSocket-Key"))
  .....
}

客戶端發(fā)起 WebSocket 連接請(qǐng)求時(shí)用的 Sec-WebSocket-key 是隨機(jī)生成的,并且是Base64編碼的。接受請(qǐng)求后,服務(wù)器需要將此密鑰附加到固定字符串。假設(shè)秘鑰是 x3JJHMbDL1EzLkh9GBhXDw== 。在這個(gè)例子中,可以使用 SHA-1 計(jì)算二進(jìn)制值,并使用 Base64 對(duì)其進(jìn)行編碼。得到 HSmrc0sMlYUkAGmm5OPpG2HaGWk= 。然后使用它作為 Sec-WebSocket-Accept 響應(yīng)頭的值。

傳輸數(shù)據(jù)幀

握手成功完成后,您的應(yīng)用程序可以從客戶端讀取數(shù)據(jù)或向客戶端寫入數(shù)據(jù)。WebSocket規(guī)范 定義了的一個(gè)客戶機(jī)和服務(wù)器之間使用的特定幀格式。這是框架的位模式:

圖:傳輸數(shù)據(jù)幀的位模式

使用以下代碼對(duì)客戶端有效負(fù)載進(jìn)行解碼:

// Recv receives data and returns a Frame
 func (ws *WS) Recv() (frame Frame, _ error) {
  frame = Frame{}
  head, err := ws.read(2)
  if err != nil {
   // handle error
  }

反過來(lái),這些代碼行允許對(duì)數(shù)據(jù)進(jìn)行編碼:

// Send sends a Frame
 func (ws *WS) Send(fr Frame) error {
  // make a slice of bytes of length 2
  data := make([]byte, 2)

  // Save fragmentation  opcode information in the first byte
  data[0] = 0x80 | fr.Opcode
  if fr.IsFragment {
   data[0] = 0x7F
  }
  .....

關(guān)閉握手

當(dāng)各方之一發(fā)送狀態(tài)為關(guān)閉的關(guān)閉幀作為有效負(fù)載時(shí),握手將關(guān)閉。可選的,發(fā)送關(guān)閉幀的一方可以在有效載荷中發(fā)送關(guān)閉原因。如果關(guān)閉是由客戶端發(fā)起的,則服務(wù)器應(yīng)發(fā)送相應(yīng)的關(guān)閉幀作為響應(yīng)。

// Close sends a close frame and closes the TCP connection
func (ws *Ws) Close() error {
 f := Frame{}
 f.Opcode = 8
 f.Length = 2
 f.Payload = make([]byte, 2)
 binary.BigEndian.PutUint16(f.Payload, ws.status)
 if err := ws.Send(f); err != nil {
  return err
 }
 return ws.conn.Close()
}

使用第三方庫(kù)快速構(gòu)建WebSocket服務(wù)

通過上面的章節(jié)可以看到用 Go 自帶的 net/http 庫(kù)實(shí)現(xiàn) WebSocket 服務(wù)還是太復(fù)雜了。好在有很多對(duì) WebSocket 支持良好的第三方庫(kù),能減少我們很多底層的編碼工作。這里我們使用 gorilla web toolkit 家族的另外一個(gè)庫(kù) gorilla/websocket 來(lái)實(shí)現(xiàn)我們的 WebSocket 服務(wù),構(gòu)建一個(gè)簡(jiǎn)單的 Echo 服務(wù)( echo 意思是回音,就是客戶端發(fā)什么,服務(wù)端再把消息發(fā)回給客戶端)。

我們?cè)?http_demo 項(xiàng)目的 handler 目錄下新建一個(gè) ws 子目錄用來(lái)存放 WebSocket 服務(wù)相關(guān)的路由對(duì)應(yīng)的請(qǐng)求處理程序。

增加兩個(gè)路由:

  • /ws/echo echo 應(yīng)用的WebSocket 服務(wù)的路由
  • /ws/echo_display echo 應(yīng)用的客戶端頁(yè)面的路由。 創(chuàng)建WebSocket服務(wù)端
// handler/ws/echo.go
package ws

import (
	"fmt"
	"github.com/gorilla/websocket"
	"net/http"
)

var upgrader = websocket.Upgrader{
	ReadBufferSize: 1024,
	WriteBufferSize: 1024,
}

func EchoMessage(w http.ResponseWriter, r *http.Request) {
	conn, _ := upgrader.Upgrade(w, r, nil) // 實(shí)際應(yīng)用時(shí)記得做錯(cuò)誤處理

	for {
		// 讀取客戶端的消息
		msgType, msg, err := conn.ReadMessage()
		if err != nil {
			return
		}

		// 把消息打印到標(biāo)準(zhǔn)輸出
		fmt.Printf("%s sent: %s\n", conn.RemoteAddr(), string(msg))

		// 把消息寫回客戶端,完成回音
		if err = conn.WriteMessage(msgType, msg); err != nil {
			return
		}
	}
}
  • conn 變量的類型是 *websocket.Conn , websocket.Conn 類型用來(lái)表示 WebSocket 連接。服務(wù)器應(yīng)用程序從 HTTP 請(qǐng)求處理程序調(diào)用 Upgrader.Upgrade 方法以獲取 *websocket.Conn
  • 調(diào)用連接的 WriteMessageReadMessage 方法發(fā)送和接收消息。上面的 msg 接收到后在下面又回傳給了客戶端。 msg 的類型是 []byte 。

創(chuàng)建WebSocket客戶端

前端頁(yè)面路由對(duì)應(yīng)的請(qǐng)求處理程序如下,直接返回 views/websockets.html 給到瀏覽器渲染頁(yè)面即可。

// handler/ws/echo_display.go
package ws

import "net/http"

func DisplayEcho(w http.ResponseWriter, r *http.Request) {
	http.ServeFile(w, r, "views/websockets.html")
}

websocket.html 里我們需要用 JavaScript 連接 WebScoket 服務(wù)進(jìn)行收發(fā)消息,篇幅原因我就只貼 JS 代碼了

form>
 input id="input" type="text" />
 button onclick="send()">Send/button>
 pre id="output">/pre>
/form>
...
script>
 var input = document.getElementById("input");
 var output = document.getElementById("output");
 var socket = new WebSocket("ws://localhost:8000/ws/echo");

 socket.onopen = function () {
  output.innerHTML += "Status: Connected\n";
 };

 socket.onmessage = function (e) {
  output.innerHTML += "Server: " + e.data + "\n";
 };

 function send() {
  socket.send(input.value);
  input.value = "";
 }
/script>
...

注冊(cè)路由

服務(wù)端和客戶端的程序都準(zhǔn)備好后,我們按照之前約定好的路徑為他們注冊(cè)路由和對(duì)應(yīng)的請(qǐng)求處理程序:

// router/router.go
func RegisterRoutes(r *mux.Router) {
 ...
 wsRouter := r.PathPrefix("/ws").Subrouter()
 wsRouter.HandleFunc("/echo", ws.EchoMessage)
 wsRouter.HandleFunc("/echo_display", ws.DisplayEcho)
}

測(cè)試驗(yàn)證

重啟服務(wù)后訪問 http://localhost:8000/ws/echo_display ,在輸入框中輸入任何消息都能再次回顯到瀏覽器中。

服務(wù)端則是把收到的消息打印到終端中然后把調(diào)用 writeMessage 把消息再回傳給客戶端,可以在終端中查看到記錄。

總結(jié)

WebSocket 在現(xiàn)在更新頻繁的應(yīng)用中使用非常廣泛,進(jìn)行 WebSocket 編程也是我們需要掌握的一項(xiàng)必備技能。文章的實(shí)踐練習(xí)稍微簡(jiǎn)單了一些,也沒有做錯(cuò)誤和安全性檢查。主要是為了講清楚大概的流程。關(guān)于 gorilla/websocket 更多的細(xì)節(jié)在使用時(shí)還需要查看官方文檔才行。

參考鏈接:

https://yalantis.com/blog/how-to-build-websockets-in-go/

https://www.gorillatoolkit.org/pkg/websocket

到此這篇關(guān)于使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Go語(yǔ)言創(chuàng)建WebSocket 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 利用Go語(yǔ)言搭建WebSocket服務(wù)端方法示例
  • Go 實(shí)現(xiàn)百萬(wàn)WebSocket連接的方法示例
  • 利用 Go 語(yǔ)言編寫一個(gè)簡(jiǎn)單的 WebSocket 推送服務(wù)
  • go的websocket實(shí)現(xiàn)原理與用法詳解

標(biāo)簽:貴陽(yáng) 調(diào)研邀請(qǐng) 德州 廣西 阿克蘇 西雙版納 慶陽(yáng) 太原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例》,本文關(guān)鍵詞  使用,語(yǔ)言,創(chuàng)建,WebSocket,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用Go語(yǔ)言創(chuàng)建WebSocket服務(wù)的實(shí)現(xiàn)示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    性欧美大战久久久久久久久| 亚洲图片欧美日韩| 国产最新视频在线观看| 欧洲永久精品大片ww免费漫画| 色哟哟一一国产精品| 国产日韩欧美在线视频观看| 一本到一区二区三区| 欧美一级大片免费看| 四虎精品成人影院观看地址| 一本大道伊人av久久综合| 日韩一区二区在线观看视频播放| 精品国产制服丝袜高跟| 色偷偷免费视频| www.youjizz.com亚洲| 成年人免费在线观看网站| 男人的天堂在线视频免费观看| 欧美色图影院| 中文字幕精品视频| 成人一区二区三区视频| 中文字幕一区二区三区不卡在线| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产老熟妇精品观看| 久久久久久草| 91亚洲国产成人久久精品| ass白嫩白嫩的小美女| 成人av第一页| 91精品国产综合久| 国模叶桐国产精品一区| 欧美国产日本视频| 亚洲人和日本人hd| 韩曰欧美视频免费观看| 国产深夜精品| 日韩免费av一区二区| 亚洲一区在线视频| 欧美精品一级| 国产精品扒开腿做| 制服丝袜第一页在线观看| 国产精品久久久免费视频| 又粗又大的机巴好爽欧美| 日韩在线观看免费高清| 亚洲精品v欧美精品v日韩精品| 自拍偷拍第9页| 色婷婷国产精品综合在线观看| 亚洲第一区第二区第三区| 91av视频在线免费观看| jizz日本| 国精品人伦一区二区三区蜜桃| 91青青草视频| 成人午夜私人影院| 五月天久久综合网| 操操操干干干| 亚洲免费福利| 一本大道香蕉久久| 韩国成人动漫| 久久久久国产免费| 秋霞在线午夜| 国产精品视频一区麻豆| 免费av观看网址| 欧美一区二区三区观看| 在线观看国产精品网站| 中文字幕一区二区人妻视频| 欧美色欧美亚洲高清在线视频| 亚洲精品一区二区毛豆| 成a人v在线播放| 一区二区日本| 黄污视频在线观看| 日韩欧美亚洲综合| 91社区在线| 免费视频一区二区三区在线观看| 国产无遮挡又黄又爽免费软件| 国产日韩一区二区三区| 国产精品五区| 少妇一级淫片日本| 亚洲午夜久久| 亚洲三级观看| 午夜欧美巨大性欧美巨大| 亚洲跨种族黑人xxx| 韩国精品主播一区二区在线观看| 性生大片免费观看性| 国产精品乱码久久久| 日韩在线精品一区| 中国一级片黄色一级片黄| 亚洲一区精品视频在线观看| 亚洲国产精品欧美一二99| 激情国产一区二区| 先锋成人影院| 99r精品视频| 亚洲精品91美女久久久久久久| 亚洲欧美在线看| 天天天天天天天干| 中文在线永久免费观看| 白丝校花扒腿让我c| 成人免费a级片| 成年人免费网站在线观看| 欧美成人猛片aaaaaaa| 粉嫩一区二区三区四区公司1| 91在线观看高清| 国产激情精品久久久第一区二区| 亚洲国产精品小视频| 日本成人在线不卡| 黄色视屏在线免费观看| 99se视频在线观看| 国产性猛交xxxx免费看久久| 欧美伊人久久大香线蕉综合69| 国产欧美日韩一区二区三区在线观看| 女厕嘘嘘一区二区在线播放| 一级黄色小视频| 人妻少妇一区二区| 一本色道久久综合亚洲精品按摩| 妞干网免费在线视频| 国产亚洲自拍av| 成熟妇人a片免费看网站| 亚洲最新av在线网站| 日韩成人在线播放| 超碰在线12| 人妻熟妇乱又伦精品视频| 影音先锋亚洲一区| 中文字幕欧美日韩精品| 国产一区二区三区高清视频| 热99精品只有里视频精品| 一级黄色片日本| 国产又粗又硬视频| 97精品国产福利一区二区三区| 欧美大肥婆大肥bbbbb| 日韩黄色一区二区| 一本久道久久综合无码中文| 国产95在线|亚洲| 91av资源网| 老牛国内精品亚洲成av人片| 日韩精品中文字幕在线不卡尤物| 中文字幕乱码一区二区| 97人人模人人爽人人少妇| 亚洲一区二区精品3399| 亚洲1区在线| 快射av在线播放一区| 国产欧美日韩精品高清二区综合区| 国产xxxxxx| 26uuu亚洲综合色欧美| 国产日韩欧美在线看| 亚洲精品自拍第一页| 少妇精品导航| 国产一区二区成人久久免费影院| 91精品综合久久久久久久久久久| 成人网视频在线观看| yiren22亚洲综合| 亚洲精品午夜久久久久久久| 午夜精品久久久| 成人免费视频在线观看| 国产午夜精品一区二区三区视频| 无码人妻aⅴ一区二区三区有奶水| 亚洲成色www久久网站| 亚洲精品中文字幕99999| 91亚洲精品一区二区乱码| 中文高清一区| 亚洲欧洲一区二区三区在线观看| 91精品国产高清一区二区三区蜜臀| 国产偷窥洗澡视频| 午夜在线视频免费| 亚洲午夜女主播在线直播| 中国在线观看免费国语版电影| 国产欧美一区二区三区四区| 99久久精品免费观看| 亚洲伊人第一页| 中文字幕免费观看一区| 欧美在线观看一区二区| 日韩三级在线| 欧美69精品久久久久久不卡| 欧美日韩aaa| 欧美啪啪精品| caoporn成人免费视频在线| 中文字幕人成高视频| www.久久撸.com| 熟妇人妻久久中文字幕| 久久久亚洲网站| 久久久精品国产免大香伊| 97欧美精品一区二区三区| 久草视频免费在线播放| 黄色一级视频网站| 日日日日人人人夜夜夜2017| 日本黄色不卡视频| 欧美野外猛男的大粗鳮| 91精品啪aⅴ在线观看国产| 久久精品视频国产| 国产高清一区日本| 成人精品国产一区二区4080| 一级一片免费播放| 亚洲免费观看高清完整| 最新中文字幕一区| 精品国产欧美一区二区三区成人| 8x8x成人免费视频| 精品国产18久久久久久| 国产裸体舞一区二区三区| 草民电影神马电影一区二区| 91视频xxxx| 性孕妇free特大另类| 午夜精品一区| 精品国产免费久久| 日韩精品诱惑一区?区三区| www..com日韩| 亚洲欧美怡红院| www.日本久久久久com.| 91深夜福利| 在线观看网站免费入口在线观看国内| av中文字幕不卡| 中国一区二区视频| 欧美日韩一级视频| 亚洲午夜福利在线观看| 亚洲日本乱码在线观看| 日韩成人一区| 国产白丝一区二区三区| 石原莉奈一区二区三区高清在线| 99在线看视频| 亚洲综合激情另类小说区| av动漫在线观看| 欧美自拍视频在线| 亚洲精品大全| 成人春色在线观看免费网站| 日韩欧美一级二级三级| 日韩av一区在线观看| 羞羞网站在线| 国产网站免费观看| 美女福利一区二区| 国产在线播放一区| 91高清视频在线免费观看| 国产午夜福利一区| 国产一级精品视频| 欧美在线视频在线播放完整版免费观看| 二区视频在线| 手机看片福利视频| 蜜桃欧美视频| 在线观看av的网站| 中文一区一区三区高中清不卡免费| 日本黄色激情视频| 欧美精品在线一区二区| 九九精品视频在线看| 无人区在线高清完整免费版 一区二| 欧美精品99久久久| 一区二区三区四区不卡视频| 日韩在线精品强乱中文字幕| 久久久噜噜噜久久| 欧美xxxx老人做受| 国产精品麻豆免费版现看视频| 国产精品12p| 涩视频在线观看| 91精品国产乱码久久久张津瑜| 色先锋久久av资源部| 中文字幕第八页| 天堂在线资源库| 日韩久久免费av| 日韩精品视频免费看| jizzjizzji欧美| 精品自拍视频在线观看| 亚洲国产成人精品电影| 成人3d漫画免费无遮挡软件| 国产秀色在线www免费观看| 免费污污网站| 制服.丝袜.亚洲.中文.综合懂色| 波多野结衣一区二区| 精品少妇一区二区三区在线视频| 欧美日韩午夜| 欧美极品美女视频网站在线观看免费| 欧美高清视频| 被灌满精子的波多野结衣| xxxx性欧美黑人| 成人国产在线视频| 日韩精品不卡一区二区| 成人自拍小视频| 北条麻妃在线一区| va亚洲va日韩不卡在线观看| 亚洲精品午夜国产va久久成人| 国产精品久久久久秋霞鲁丝| 老司机午夜免费福利| 欧美三级在线播放| 成人两性免费视频| 一本大道久久a久久精品综合| 欧美日本啪啪无遮挡网站| 蜜桃视频www网站在线观看| 亚洲三区四区| 日韩乱码人妻无码中文字幕| 免费在线看一区| 成品网站w灬+源码1688网页| 国产一级做a爰片在线看免费| 色偷偷888欧美精品久久久| 日韩精品高清在线| 九九热视频免费观看| 免费无遮挡无码永久视频| 在线观看涩涩| 亚洲综合激情小说| 日本乱码高清不卡字幕| 日韩69视频在线观看| 欧美一区一区| 加勒比海盗1在线观看免费国语版| 亚洲午夜精品一区二区三区| 国产亚洲人成a在线v网站| 在线免费观看日韩欧美| 成人免费91在线看| 性生生活大片免费看视频| 影音先锋国产在线资源| 成人天堂资源www在线| 色网站免费观看| 国产二级c片l毛片| 精品人妻一区二区三区蜜桃视频| 中文字幕精品一区二区三区精品| 中文字幕一区二区三区不卡在线| 亚洲一区二区三区四区五区午夜| 91色乱码一区二区三区| 精品三级在线| 91精品视频免费在线观看| 少妇一级淫片免费看| 日韩欧美自拍偷拍| 91超碰在线免费| 欧美日韩精品在线一区| 一区二区xxx| 亚洲人成电影网站色…| 成人福利视频| 在线观看黄色av网站| 国产精品美女免费看| 中文字幕日韩第一页| 中文字幕另类日韩欧美亚洲嫩草| 国模冰冰炮一区二区| 日韩精品91| 给我看免费高清在线观看| 欧美日韩在线视频免费| 97超碰人人看| 亚洲天堂av在线免费| 91在线视频免费91| 无码精品一区二区三区在线播放| 开心激情综合网|