精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用OkHttp實現(xiàn)WebSocket長連接

開發(fā) 前端
先簡單介紹下WebSocket。我們都知道Http是處于應(yīng)用層的一個通信協(xié)議,但是只支持單向主動通信,做不到服務(wù)器主動向客戶端推送消息。而且Http是無狀態(tài)的,即每次通信都沒有關(guān)聯(lián)性,導(dǎo)致跟服務(wù)器關(guān)系不緊密。

今天給大家?guī)硪黄衔恼拢榻BWebSocket,大家可以了解了解。

前言

最近老板又來新需求了,要做一個物聯(lián)網(wǎng)相關(guān)的app,其中有個需求是客戶端需要收發(fā)服務(wù)器不定期發(fā)出的消息。

內(nèi)心OS:

  • 這咋整呢?通過接口輪詢?定時訪問接口,有數(shù)據(jù)就更新?
  • 不行不行,這樣浪費資源了,還耗電,會導(dǎo)致很多請求都是無效的網(wǎng)絡(luò)操作。
  • 那就長連接唄?WebSocket協(xié)議好像不錯,通過握手建立長連接后,可以隨時收發(fā)服務(wù)器的消息。那就它了!
  • 怎么集成呢?正好前段時間復(fù)習(xí)OkHttp源碼的時候發(fā)現(xiàn)了它是支持Websocket協(xié)議的,那就用它試試吧!

開淦!

WebSocket介紹

先簡單介紹下WebSocket。我們都知道Http是處于應(yīng)用層的一個通信協(xié)議,但是只支持單向主動通信,做不到服務(wù)器主動向客戶端推送消息。而且Http是無狀態(tài)的,即每次通信都沒有關(guān)聯(lián)性,導(dǎo)致跟服務(wù)器關(guān)系不緊密。

為了解決和服務(wù)器長時間通信的痛點呢,HTML5規(guī)范引出了WebSocket協(xié)議(知道這名字咋來的吧,人家HTML5規(guī)范引出的,隨爸姓),是一種建立在TCP協(xié)議基礎(chǔ)上的全雙工通信的協(xié)議。他跟Http同屬于應(yīng)用層協(xié)議,下層還是需要通過TCP建立連接。

但是,WebSocket在TCP連接建立后,還要通過Http進(jìn)行一次握手,也就是通過Http發(fā)送一條GET請求消息給服務(wù)器,告訴服務(wù)器我要建立WebSocket連接了,你準(zhǔn)備好哦,具體做法就是在頭部信息中添加相關(guān)參數(shù)。然后服務(wù)器響應(yīng)我知道了,并且將連接協(xié)議改成WebSocket,開始建立長連接。

這里貼上請求頭和響應(yīng)頭信息,從網(wǎng)上找了一張圖:

3851594110877_.pic.jpg

 

簡單說明下參數(shù):

  • URL一般是以ws或者wss開頭,ws對應(yīng)Websocket協(xié)議,wss對應(yīng)在TLS之上的WebSocket。類似于Http和Https的關(guān)系。
  • 請求方法為GET方法。
  • Connection:Upgrade,表示客戶端要連接升級,不用Http協(xié)議。
  • Upgrade:websocket, 表示客戶端要升級建立Websocket連接。
  • Sec-Websocket-Key:key, 這個key是隨機生成的,服務(wù)器會通過這個參數(shù)驗證該請求是否有效。
  • Sec-WebSocket-Version:13, websocket使用的協(xié)議,一般就是13。
  • Sec-webSocket-Extension:permessage-deflate,客戶端指定的一些擴展協(xié)議,比如這里permessage-deflate就是WebSocket的一種壓縮協(xié)議。
  • 響應(yīng)碼101,表示響應(yīng)協(xié)議升級,后續(xù)的數(shù)據(jù)交互都按照Upgradet指定的WebSocket協(xié)議來。

OkHttp實現(xiàn)

添加OkHttp依賴

  1. implementation("com.squareup.okhttp3:okhttp:4.7.2"

實現(xiàn)代碼

首先是初始化OkHttpClient和WebSocket實例:

  1. /** 
  2.  * 初始化WebSocket 
  3.  */ 
  4. public void init() { 
  5.     mWbSocketUrl = "ws://echo.websocket.org"
  6.     mClient = new OkHttpClient.Builder() 
  7.             .pingInterval(10, TimeUnit.SECONDS) 
  8.             .build(); 
  9.     Request request = new Request.Builder() 
  10.             .url(mWbSocketUrl) 
  11.             .build(); 
  12.     mWebSocket = mClient.newWebSocket(request, new WsListener()); 

這里主要是配置了OkHttp的一些參數(shù),以及WebSocket的連接地址。其中newWebSocket方法就是進(jìn)行WebSocket的初始化和連接。

這里要注意的點是pingInterval方法的配置,這個方法主要是用來設(shè)置WebSocket連接的保活。相信做過長連接的同學(xué)都知道,一個長連接一般要隔幾秒發(fā)送一條消息告訴服務(wù)器我在線,而服務(wù)器也會回復(fù)一個消息表示收到了,這樣就確認(rèn)了連接正常,客戶端和服務(wù)器端都在線。

如果服務(wù)器沒有按時收到這個消息那么服務(wù)器可能就會主動關(guān)閉這個連接,節(jié)約資源??蛻舳藳]有正常收到這個返回的消息,也會做一些類似重連的操作,所以這個?;钕⒎浅V匾?。

我們稱這個消息叫作心跳包,一般用PING,PONG表示,像乒乓球一樣,一來一回。所以這里的pingInterval就是設(shè)置心跳包發(fā)送的間隔時間,設(shè)置了這個方法之后,OkHttp就會自動幫我們發(fā)送心跳包事件,也就是ping包。當(dāng)間隔時間到了,沒有收到pong包的話,監(jiān)聽事件中的onFailure方法就會被調(diào)用,此時我們就可以進(jìn)行重連。

但是由于實際業(yè)務(wù)需求不一樣,以及okhttp中心跳包事件給予我們權(quán)限較少,所以我們也可以自己完成心跳包事件,即在WebSocket連接成功之后,開始定時發(fā)送ping包,在下一次發(fā)送ping包之前檢查上一個pong包是否收到,如果沒收到,就視為異常,開始重連。感興趣的同學(xué)可以看看文末的相關(guān)源碼。

建立連接后,我們就可以正常發(fā)送和讀取消息了,也就是在上文WsListener監(jiān)聽事件中表現(xiàn):

  1. //監(jiān)聽事件,用于收消息,監(jiān)聽連接的狀態(tài) 
  2. class WsListener extends WebSocketListener { 
  3.     @Override 
  4.     public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) { 
  5.         super.onClosed(webSocket, code, reason); 
  6.     } 
  7.  
  8.     @Override 
  9.     public void onClosing(@NotNull WebSocket webSocket, int code, @NotNull String reason) { 
  10.         super.onClosing(webSocket, code, reason); 
  11.     } 
  12.  
  13.     @Override 
  14.     public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, @Nullable Response response) { 
  15.         super.onFailure(webSocket, t, response); 
  16.     } 
  17.  
  18.     @Override 
  19.     public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) { 
  20.         super.onMessage(webSocket, text); 
  21.         Log.e(TAG, "客戶端收到消息:" + text); 
  22.         onWSDataChanged(DATE_NORMAL, text); 
  23.        //測試發(fā)消息 
  24.         webSocket.send("我是客戶端,你好啊"); 
  25.     } 
  26.  
  27.     @Override 
  28.     public void onMessage(@NotNull WebSocket webSocket, @NotNull ByteString bytes) { 
  29.         super.onMessage(webSocket, bytes); 
  30.     } 
  31.  
  32.     @Override 
  33.     public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) { 
  34.         super.onOpen(webSocket, response); 
  35.         Log.e(TAG,"連接成功!"); 
  36.     } 
  37.  
  38.  
  39. //發(fā)送String消息 
  40. public void send(final String message) { 
  41.     if (mWebSocket != null) { 
  42.         mWebSocket.send(message); 
  43.     } 
  44.  
  45. /** 
  46.  * 發(fā)送byte消息 
  47.  * @param message 
  48.  */ 
  49. public void send(final ByteString message) { 
  50.     if (mWebSocket != null) { 
  51.         mWebSocket.send(message); 
  52.     } 
  53. }     
  54.  
  55. //主動斷開連接 
  56. public void disconnect(int code, String reason) { 
  57.     if (mWebSocket != null
  58.         mWebSocket.close(code, reason); 

這里要注意,回調(diào)的方法都是在子線程回調(diào)的,如果需要更新UI,需要切換到主線程。

基本操作就這么多,還是很簡單的吧,初始化Websocket——連接——連接成功——收發(fā)消息。

其中WebSocket類是一個操作接口,主要提供了以下幾個方法

  • send(text: String)發(fā)送一個String類型的消息
  • send(bytes: ByteString) 發(fā)送一個二進(jìn)制類型的消息
  • close(code: Int, reason: String?)關(guān)閉WebSocket連接

如果有同學(xué)想測試下WebSocket的功能但是又沒有實際的服務(wù)器,怎么辦呢?其實OkHttp官方有一個MockWebSocket服務(wù),可以用來模擬服務(wù)端,下面我們一起試一下:

模擬服務(wù)器

首先集成MockWebSocket服務(wù)庫:

  1. implementation 'com.squareup.okhttp3:mockwebserver:4.7.2' 

然后就可以新建MockWebServer,并加入MockResponse作為接收消息的響應(yīng)。

  1. MockWebServer mMockWebServer = new MockWebServer(); 
  2.   MockResponse response = new MockResponse() 
  3.           .withWebSocketUpgrade(new WebSocketListener() { 
  4.               @Override 
  5.               public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) { 
  6.                   super.onOpen(webSocket, response); 
  7.                   //有客戶端連接時回調(diào) 
  8.                   Log.e(TAG, "服務(wù)器收到客戶端連接成功回調(diào):"); 
  9.                   mWebSocket = webSocket; 
  10.                   mWebSocket.send("我是服務(wù)器,你好呀"); 
  11.               } 
  12.  
  13.               @Override 
  14.               public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) { 
  15.                   super.onMessage(webSocket, text); 
  16.  
  17.                   Log.e(TAG, "服務(wù)器收到消息:" + text); 
  18.               } 
  19.  
  20.               @Override 
  21.               public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) { 
  22.                   super.onClosed(webSocket, code, reason); 
  23.                   Log.e(TAG, "onClosed:"); 
  24.               } 
  25.           }); 
  26.  
  27.   mMockWebServer.enqueue(response); 

這里服務(wù)器端在收到客戶端連接成功消息后,給客戶端發(fā)送了一條消息。要注意的是這段代碼要在子線程執(zhí)行,因為主線程不能進(jìn)行網(wǎng)絡(luò)操作。

然后就可以去初始化Websocket客戶端了:

  1. //獲取連接url,初始化websocket客戶端 
  2. String websocketUrl = "ws://" + mMockWebServer.getHostName() + ":" + mMockWebServer.getPort() + "/"
  3. WSManager.getInstance().init(websocketUrl); 

ok,運行項目

//運行結(jié)果 E/jimu: mWbSocketUrl=ws://localhost:38355/ E/jimu: 服務(wù)器收到客戶端連接成功回調(diào): E/jimu: 連接成功! E/jimu: 客戶端收到消息:我是服務(wù)器,你好呀 E/jimu: 服務(wù)器收到消息:我是客戶端,你好啊

參考

https://github.com/square/okhttp

本文轉(zhuǎn)載自微信公眾號「碼上積木,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼上積木公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼上積木
相關(guān)推薦

2020-03-19 10:13:13

OkHttpWebSocket

2025-01-27 12:31:23

PythonLocustWebSocket

2017-07-11 13:58:10

WebSocket

2021-07-30 15:06:05

鴻蒙HarmonyOS應(yīng)用

2024-01-11 08:53:58

2021-04-27 18:12:22

WebSocket持久化連接HTTP

2018-06-06 11:01:25

HTTP長連接短連接

2022-10-24 08:14:35

長連接負(fù)載均衡Conusmer

2022-12-02 13:49:41

2023-11-28 08:49:01

短輪詢WebSocket長輪詢

2020-03-24 15:15:29

HttpClientOkHttpJava

2023-01-27 23:31:08

數(shù)據(jù)長輪詢長連接

2021-03-24 09:06:01

MySQL長連接短連接

2024-06-06 09:12:40

數(shù)據(jù)庫SQLServer

2015-06-11 10:57:10

2023-12-04 07:14:40

通信微服務(wù)

2023-08-14 08:01:12

websocket8g用戶

2021-03-25 08:29:33

SpringBootWebSocket即時消息

2021-11-16 10:45:35

WebSocketWebShellLinux

2020-09-05 17:00:20

HTTP長連接短連接
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲专区国产精品| 成人爽a毛片一区二区| 天天综合网在线| 不卡一区综合视频| 国产高清精品久久久久| 亚洲精品国产成人| 男人的天堂成人| 久久国产视频一区| 在线观看视频一区二区三区| 国产农村妇女毛片精品久久麻豆 | 亚洲综合专区| 在线观看亚洲a| 精品免费日产一区一区三区免费| √天堂中文官网8在线| 韩国成人在线| 91免费看片在线观看| 久久久久亚洲精品国产| 三上悠亚在线一区| 在线黄色av网站| 最新国产精品视频| 欧美视频免费在线| 九九热久久66| 91视频免费网址| 日韩有码av| 精品久久久久国产| 欧美精彩一区二区三区| 久久精品视频久久| 18国产精品| 欧美伊人久久久久久久久影院 | 天天av天天翘天天综合网色鬼国产| 日韩视频在线观看国产| 99re这里只有精品在线| 免费欧美视频| 欧美疯狂做受xxxx富婆| 麻豆精品视频| 无码日韩精品一区二区| 欧美va天堂| 亚洲福利视频久久| 男人操女人逼免费视频| 伊人网站在线观看| 久久精品青草| 精品欧美一区二区三区精品久久| av在线免费观看国产| 日韩中文字幕观看| 老鸭窝亚洲一区二区三区| 亚洲天堂影视av| 91 视频免费观看| 丝袜国产在线| 希岛爱理一区二区三区| 国产一区二区三区在线视频| 天天看片天天操| 吞精囗交69激情欧美| 国产精品色噜噜| 欧美极品另类videosde| 欧美日韩国产123区| 色姑娘综合网| 99久久久国产精品无码网爆| 精品电影一区| 亚洲视频日韩精品| 中文字幕第66页| 热色播在线视频| 国产精品美女一区二区在线观看| 日本一区视频在线播放| 黄色毛片在线看| 国产一级精品在线| 日本久久久久久| 杨钰莹一级淫片aaaaaa播放| 久久精品亚洲成在人线av网址| 色一区在线观看| www.激情网| 国产视频三级在线观看播放| 国产精品一区在线观看乱码| 国产69精品久久久久久| 欧美xxxooo| 天天躁日日躁狠狠躁欧美| 日韩精品视频免费| 色综合色综合色综合色综合| 粉嫩av一区二区三区四区五区| 午夜视频一区二区| 中文字幕日韩一区二区三区不卡| 亚洲欧洲国产综合| 国产乱码精品一区二区三区五月婷 | 成年人免费在线视频| 国产成人免费视频一区| 国产一区二区三区四区五区在线 | 亚洲精品一区二三区不卡| 天堂av2020| 凹凸av导航大全精品| 欧美色图在线观看| 欧美一级在线看| 精品123区| 欧美一区二区播放| 一级片视频免费观看| www.91精品| 欧美中文字幕一区| 欧美xxxxxbbbbb| 秋霞影院一区二区三区| 日韩欧美亚洲国产另类| 国产色视频在线播放| 久久久久毛片免费观看| 欧美嫩在线观看| 亚洲精品鲁一鲁一区二区三区| 色综合视频一区二区三区日韩| 欧美日韩美女| 久久精品视频网| 国产精品果冻传媒潘| 国产精品视频a| 蜜桃视频第一区免费观看| 18久久久久久| 日韩欧美一级视频| 久久av中文字幕片| 国产欧美中文字幕| 一级黄色大片免费观看| 久久久水蜜桃av免费网站| 欧美疯狂xxxx大交乱88av| 91高清免费看| 蜜桃伊人久久| 高清免费日韩| 欧美在线 | 亚洲| 国产精品网站在线观看| 一区二区三区四区不卡| 黄色网址在线免费观看| 亚洲人午夜精品天堂一二香蕉| 一区二区视频在线免费| 激情视频网站在线播放色 | 日本网站在线免费观看| 狠狠入ady亚洲精品经典电影| 欧美大片在线看| 在线观看日韩一区二区| 久久久不卡网国产精品二区| www.射射射| 超级碰碰久久| 欧美日韩一区不卡| 蜜桃传媒一区二区亚洲av| 国产成人黄色| 日韩在线www| 欧美日韩国产精品一区二区三区| 韩国亚洲精品| 91色视频在线导航| 日本xxxxxwwwww| 一区二区三区在线高清| 欧美精品99久久| 六月丁香久久丫| 国内免费精品永久在线视频| 亚洲av无码专区在线| 91在线观看污| 亚洲欧美综合一区| 狂野欧美激情性xxxx欧美| 欧美日韩激情美女| 午夜啪啪小视频| 四季av在线一区二区三区| 欧美男插女视频| 国产成人无码av| 久久人人97超碰com| 伊人狠狠色丁香综合尤物| 深夜视频一区二区| 国产一区二区三区网站| 亚洲av无码乱码国产精品fc2| 国产精品一区二区久久精品爱涩| 国产91av视频在线观看| 日韩一级视频| 欧美精品一区二区三区国产精品| 欧美不卡视频在线观看| 久久精品国产精品亚洲精品 | 一本色道久久综合亚洲精品酒店| 久久激情五月丁香伊人| 日韩成人在线免费视频| aaa欧美色吧激情视频| 亚洲资源在线网| 国产成人视屏| 国产一区二区三区在线视频| 一本一道精品欧美中文字幕| 亚洲精品免费一二三区| 国产伦理在线观看| 午夜综合激情| 97夜夜澡人人双人人人喊| 福利在线播放| 欧美精品国产精品| 国产精品16p| www成人在线观看| 国产熟人av一二三区| 2020最新国产精品| 欧美最猛黑人xxxx黑人猛叫黄| 国产绳艺sm调教室论坛| 性做久久久久久久免费看| japanese中文字幕| 亚洲视频1区| 操人视频欧美| 国产三区视频在线观看| 亚洲高清色综合| 欧美另类高清videos的特点| 亚洲免费观看高清完整版在线 | 在线视频亚洲自拍| 成人香蕉社区| 国产欧美亚洲视频| 黄色美女视频在线观看| 欧美精品xxxxbbbb| 日韩美女一级片| 国产三级一区二区| 国产免费成人在线| 伦理一区二区三区| 国产欧美日韩精品丝袜高跟鞋| 久久久pmvav| 都市激情亚洲色图| 欧美一区免费观看| 久久综合狠狠综合久久激情| 操人视频免费看| 欧美专区在线| 18禁裸男晨勃露j毛免费观看| 韩国一区二区三区视频| 人人澡人人澡人人看欧美| av超碰免费在线| 日韩欧美亚洲另类制服综合在线| 伊人久久久久久久久久久久 | 成人欧美一区二区三区黑人一| 成人在线视频一区二区| 国产九色porny| 日韩精品四区| 91精品啪在线观看麻豆免费| 亚洲天堂导航| 欧美精品videos另类日本| 亚洲va天堂va欧美ⅴa在线| 色噜噜狠狠成人中文综合| 一区二区伦理片| 成人午夜私人影院| 国产伦精品一区二区三区妓女下载| 欧美午夜在线视频| 国产一区二区精品在线| www 久久久| 国产精品中文字幕在线| gogo亚洲高清大胆美女人体| 中文字幕亚洲激情| 国产精品欧美久久久久天天影视| 91久久精品国产91性色tv| 国产成人自拍视频在线| 亚洲最大成人网4388xx| 免费中文字幕av| 热久久国产精品| 久久久成人精品一区二区三区 | 久久99精品国产99久久| 亚洲精品福利| 96久久精品| 88久久精品| 国产午夜精品在线| 久久国产精品色av免费看| 狠狠色噜噜狠狠色综合久| 美日韩黄色大片| 精品视频导航| 九九视频免费观看视频精品 | 2018国产精品| 国产成人精品免费| 亚洲网站在线看| 国产无套粉嫩白浆在线2022年| 亚洲精品中文字幕有码专区| 日韩私人影院| 欧美三级中文字幕在线观看| 中文字幕91爱爱| 欧美片网站yy| a天堂在线视频| 亚洲女子a中天字幕| 亚洲综合视频网站| 亚洲综合色视频| 日韩欧美三级视频| 日本高清成人免费播放| 奴色虐av一区二区三区| 欧美日韩精品欧美日韩精品| 国产精品乱码久久久| 日韩欧美三级在线| 亚洲欧美日韩免费| 中文亚洲视频在线| 手机电影在线观看| 热re91久久精品国99热蜜臀| 国产亚洲精彩久久| 久久久久久久久爱| 夜鲁夜鲁夜鲁视频在线播放| 菠萝蜜影院一区二区免费| 在线不卡日本v二区707| 午夜精品一区二区三区在线 | 日韩美女啊v在线免费观看| 国产精品久久久久久久无码| 激情综合五月婷婷| 午夜视频你懂的| 午夜在线播放视频欧美| wwwwwxxxx日本| 成人av网址在线观看| 亚洲一二区在线观看| 欧美aaaaa成人免费观看视频| jizz欧美性11| 成人污视频在线观看| 亚洲成人黄色av| 一区二区三区在线视频播放| 狠狠人妻久久久久久| 欧美日韩国产高清一区二区| 亚洲精品国偷拍自产在线观看蜜桃| 亚洲男人第一av网站| 日韩在线一区二区三区四区| 亚洲最新av在线| 欧美人与牲禽动交com| 国产97在线亚洲| 91蜜桃臀久久一区二区| 涩涩日韩在线| 国产视频欧美| 中文字幕亚洲影院| 国产欧美日韩在线| 国产精品16p| 日韩午夜小视频| 精品人妻aV中文字幕乱码色欲| 欧美日韩视频专区在线播放| 亚洲高清在线观看视频| 综合136福利视频在线| 男女羞羞在线观看| 91成人免费视频| 日韩精品免费一区二区三区| 亚洲 高清 成人 动漫| 国产成人在线网站| 萌白酱视频在线| 色欧美乱欧美15图片| 日韩在线视频观看免费| 欧美精品免费在线| 欧美高清你懂的| 亚洲a∨一区二区三区| 亚洲尤物影院| 捆绑凌虐一区二区三区| 91影院在线免费观看| 国产人妻精品一区二区三区不卡| 91久久精品日日躁夜夜躁欧美| 五月婷中文字幕| 久久久久亚洲精品| 97久久亚洲| 久久久久久久久久久久久国产| 亚洲午夜精品久久久久久app| 尤物国产在线观看| 国产人妖乱国产精品人妖| 波多野结衣啪啪| 亚洲精品一区二区久| 理论不卡电影大全神| 国产经品一区二区| 亚洲夜间福利| 日本在线视频播放| 亚洲精品欧美激情| 精品国产va久久久久久久| 精品精品国产国产自在线| 成人黄色图片网站| 日韩精品一区二区三区外面| 久久精品一区| 国产又黄又粗视频| 亚洲综合免费观看高清完整版在线| 91尤物国产福利在线观看| 日韩在线视频免费观看| 国产啊啊啊视频在线观看| 91精品国自产在线观看| 国产综合久久| 菠萝菠萝蜜网站| 一本大道久久a久久综合婷婷 | 日本在线视频一区二区三区| 国产欧美日韩一区| 亚洲日本欧美| 午夜剧场在线免费观看| 中文字幕一区二区三区在线观看 | 国产精品一区二区无码对白| 久久九九久久九九| 神马久久久久久久| 中文字幕日韩免费视频| 国产激情一区| 在线观看av的网址| 不卡的av网站| 国产成人av免费| 精品国内亚洲在观看18黄| 日韩精品免费视频一区二区三区| 高清无码一区二区在线观看吞精| 懂色av中文一区二区三区| 中文字幕亚洲精品一区| 亚洲欧美日韩视频一区| 久久精品xxxxx| 台湾无码一区二区| 99国产精品国产精品毛片| 丰满人妻一区二区三区四区| 久久成人亚洲精品| 97成人超碰| 一区二区成人国产精品| 国产成人欧美日韩在线电影| 国产精品一区二区三区四| 日韩免费视频一区| 两个人看的在线视频www| 色大师av一区二区三区| 国产成人免费视| 欧美国产一级片| 久久久欧美一区二区| 青青草成人影院| 亚洲黄色小说在线观看| 欧美色爱综合网| 国产桃色电影在线播放| 三级三级久久三级久久18| 成人小视频免费在线观看| 国产日韩久久久| 久久久久中文字幕| 99精品美女| 久久6免费视频| 欧美日韩一区二区在线播放| 黄色免费在线看|