999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Websocket的車(chē)聯(lián)網(wǎng)報(bào)警推送系統(tǒng)①

2020-03-18 07:55:00李先懿郭正光
關(guān)鍵詞:用戶(hù)系統(tǒng)

李先懿,郭正光

(上海勢(shì)航網(wǎng)絡(luò)科技有限公司,上海 201702)

1 概述

近年來(lái),隨著電子信息技術(shù)、移動(dòng)通信技術(shù)、物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,車(chē)聯(lián)網(wǎng)技術(shù)也有長(zhǎng)足的進(jìn)步[1,2].與此同時(shí),物流運(yùn)輸企業(yè)和政府監(jiān)管部門(mén)都對(duì)車(chē)輛安全更加重視.這也推動(dòng)了新技術(shù)在車(chē)聯(lián)網(wǎng)中的應(yīng)用.在車(chē)聯(lián)網(wǎng)系統(tǒng)中,報(bào)警通知和處理是非常重要的功能模塊.按照交通部相關(guān)法規(guī)及各省交管部門(mén)的要求[3],當(dāng)車(chē)輛發(fā)生超速、疲勞駕駛等危險(xiǎn)駕駛行為時(shí),交通部聯(lián)網(wǎng)聯(lián)控平臺(tái)的車(chē)聯(lián)網(wǎng)運(yùn)營(yíng)商需要及時(shí)收到通知,針對(duì)車(chē)輛異常行為進(jìn)行相應(yīng)處理.因此,報(bào)警通知顯得尤為重要.

當(dāng)車(chē)輛發(fā)生異常報(bào)警時(shí),終端通過(guò)socket 實(shí)時(shí)上報(bào)到車(chē)聯(lián)網(wǎng)服務(wù)器.服務(wù)器需要將報(bào)警信息實(shí)時(shí)通知到用戶(hù).傳統(tǒng)BS 架構(gòu)的車(chē)聯(lián)網(wǎng)系統(tǒng)中,一般通過(guò)AJAX 輪詢(xún)[4]的方式拉取報(bào)警信息.這種方式實(shí)現(xiàn)簡(jiǎn)單,但它的弊端也是顯而易見(jiàn):(1)輪詢(xún)是有時(shí)間間隔的,所以報(bào)警是有延遲的.過(guò)短的輪詢(xún)間隔產(chǎn)生大量的無(wú)效請(qǐng)求并增大服務(wù)器壓力.(2)當(dāng)用戶(hù)數(shù)量增多時(shí),輪詢(xún)會(huì)產(chǎn)生大量的網(wǎng)絡(luò)流量,增加不必要的帶寬損耗,并導(dǎo)致服務(wù)器產(chǎn)生很大并發(fā)壓力.(3)當(dāng)終端數(shù)據(jù)上報(bào)頻率高于AJAX 輪詢(xún)頻率時(shí),Web 客戶(hù)端還沒(méi)來(lái)得及做一次AJAX 請(qǐng)求,新的報(bào)警數(shù)據(jù)已經(jīng)覆蓋了舊的報(bào)警數(shù)據(jù),會(huì)造成報(bào)警數(shù)據(jù)丟失.因此,需要采用新的技術(shù)手段解決車(chē)聯(lián)網(wǎng)系統(tǒng)中海量報(bào)警數(shù)據(jù)推送問(wèn)題.

近年來(lái),由于HTML5 技術(shù)的廣泛普及,主流瀏覽器對(duì)HTML5 標(biāo)準(zhǔn)支持更加完善,客戶(hù)端和服務(wù)器之間的實(shí)時(shí)數(shù)據(jù)交換變得更加容易.Websocket 是HTML5新標(biāo)準(zhǔn)中的通信機(jī)制[5,6],能夠?qū)崿F(xiàn)穩(wěn)定全雙工實(shí)時(shí)通信,具有簡(jiǎn)潔高效的特點(diǎn).在Websocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就可以直接創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸,占用的網(wǎng)絡(luò)帶寬較少.它不需要安裝瀏覽器插件,所以跨瀏覽器兼容性更好.因此,Websocket 技術(shù)可作為車(chē)聯(lián)網(wǎng)系統(tǒng)中報(bào)警推送的理想方案.

2 系統(tǒng)設(shè)計(jì)

針對(duì)上述AJAX 問(wèn)題并考慮到Websocket 的優(yōu)點(diǎn),我們?cè)O(shè)計(jì)一套基于Websocket 技術(shù)的報(bào)警推送系統(tǒng).該系統(tǒng)主要包含4 個(gè)模塊:網(wǎng)關(guān)、Redis 數(shù)據(jù)庫(kù)、Websocket推送服務(wù)、Websocket 客戶(hù)端及前端頁(yè)面.整個(gè)系統(tǒng)的架構(gòu)如圖1 所示.

圖1 Websocket 報(bào)警推送系統(tǒng)架構(gòu)

在車(chē)聯(lián)網(wǎng)系統(tǒng)中,終端通過(guò)接入網(wǎng)絡(luò)[7](包括2G/3G/4G 等無(wú)線移動(dòng)通信網(wǎng)絡(luò)或WLAN 等網(wǎng)絡(luò))按照《道路運(yùn)輸車(chē)輛衛(wèi)星定位系統(tǒng)北斗兼容車(chē)載終端通訊協(xié)議技術(shù)規(guī)范》(簡(jiǎn)稱(chēng)JT/T 808)協(xié)議[8]上報(bào)定位數(shù)據(jù)、報(bào)警數(shù)據(jù)和其它附加數(shù)據(jù).網(wǎng)關(guān)模塊負(fù)責(zé)維持與眾多終端的socket 長(zhǎng)連接,接收終端上報(bào)的數(shù)據(jù),解析數(shù)據(jù)并寫(xiě)入數(shù)據(jù)庫(kù).根據(jù)上報(bào)數(shù)據(jù)的類(lèi)型不同,一些數(shù)據(jù)寫(xiě)入關(guān)系型數(shù)據(jù)庫(kù)以便長(zhǎng)期持久化.這些歷史數(shù)據(jù)將用于車(chē)輛軌跡查詢(xún)、行程分析、報(bào)警統(tǒng)計(jì)等功能.另外一些需要實(shí)時(shí)查詢(xún)和推送的數(shù)據(jù)寫(xiě)入Redis 緩存數(shù)據(jù)庫(kù).網(wǎng)關(guān)通過(guò)兩種方式寫(xiě)入Redis:通過(guò)set/hset 方式寫(xiě)入Redis 以便其它模塊查詢(xún)實(shí)時(shí)數(shù)據(jù);通過(guò)發(fā)布模式(publish)寫(xiě)入Redis 以便實(shí)時(shí)通知其它模塊.

Redis 是一個(gè)開(kāi)源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件[9].Redis 的所有數(shù)據(jù)均位于服務(wù)器的主內(nèi)存中,因此讀寫(xiě)速度非???每秒可以執(zhí)行10 萬(wàn)次以上的寫(xiě)入操作.Redis 的發(fā)布訂閱模式實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的消息隊(duì)列的功能.引入Redis 的目的在于:(1)降低網(wǎng)關(guān)與后續(xù)Websocket 推送服務(wù)間的耦合,從而保障網(wǎng)關(guān)的穩(wěn)定性.即使網(wǎng)絡(luò)異常導(dǎo)致Websocket 推送服務(wù)產(chǎn)生積壓或阻塞,也不會(huì)影響網(wǎng)關(guān)與終端的正常通信,不會(huì)影響數(shù)據(jù)寫(xiě)入關(guān)系型數(shù)據(jù)庫(kù).(2)當(dāng)多個(gè)程序訂閱Redis 消息時(shí),數(shù)據(jù)可以在系統(tǒng)內(nèi)不同模塊間實(shí)時(shí)分發(fā),實(shí)現(xiàn)數(shù)據(jù)同步.(3)Redis 本身也承擔(dān)緩存的作用,可以直接在Redis 里查詢(xún)所有車(chē)輛的最新一次位置信息、報(bào)警狀態(tài).

Websocket 推送服務(wù)主要承擔(dān)權(quán)限判斷、Websocket推送、推送統(tǒng)計(jì)等功能.它從Redis 訂閱了報(bào)警頻道(channel).當(dāng)有報(bào)警信息從Redis 推送過(guò)來(lái),它提取報(bào)警內(nèi)容以及該報(bào)警對(duì)應(yīng)的車(chē)輛信息、終端信息,然后從數(shù)據(jù)庫(kù)查詢(xún)用戶(hù)與車(chē)輛的對(duì)應(yīng)關(guān)系,判斷是否需要將本條報(bào)警信息推送給用戶(hù).由此可以做到報(bào)警推送與用戶(hù)權(quán)限綁定,具有查看車(chē)輛權(quán)限的用戶(hù)才會(huì)收到報(bào)警推送.另外,可也根據(jù)用戶(hù)喜好設(shè)置,過(guò)濾特定類(lèi)型的報(bào)警推送,只推送用戶(hù)關(guān)注的報(bào)警類(lèi)型.

Web 前端采用Socket.io 的js 庫(kù).Socket.io 是一個(gè)跨瀏覽器、支持Websocket 實(shí)時(shí)通訊的js 庫(kù)[10].它支持實(shí)時(shí)、雙向、基于事件的數(shù)據(jù)通信,可在不同平臺(tái)、瀏覽器、設(shè)備上工作.Socket.io 除了支持Websocket通訊協(xié)議外,還支持許多種輪詢(xún)(Polling)機(jī)制以及其它實(shí)時(shí)通信方式,并封裝成了通用的接口.Socket.io 能夠根據(jù)瀏覽器對(duì)通訊機(jī)制的支持情況自動(dòng)從Websocket,Adobe Flash Socket,AJAX long pulling,AJAX multipart streaming,Forever IFrame,JSONP polling 中選擇最佳的方式來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)實(shí)時(shí)應(yīng)用.這樣前端開(kāi)發(fā)Websocket變得更簡(jiǎn)單.

3 系統(tǒng)實(shí)現(xiàn)

整個(gè)車(chē)聯(lián)網(wǎng)系統(tǒng)的網(wǎng)關(guān)和后端使用Java 語(yǔ)言開(kāi)發(fā),Web 前端基于vue.js 框架開(kāi)發(fā).

車(chē)聯(lián)網(wǎng)平臺(tái)接入的終端較多,在線的終端可能數(shù)以萬(wàn)計(jì).這些終端通過(guò)TCP 長(zhǎng)鏈接與平臺(tái)通信.因此需要一個(gè)性能強(qiáng)大的網(wǎng)絡(luò)連接庫(kù).本系統(tǒng)網(wǎng)關(guān)部分采用Netty 庫(kù)處理socket 連接和數(shù)據(jù)收發(fā).Netty 是一個(gè)基于Java NIO 的客戶(hù)端/服務(wù)器網(wǎng)絡(luò)應(yīng)用框架[11].它隱藏背后復(fù)雜的網(wǎng)絡(luò)操作,提供一個(gè)易于使用的API 框架.

Netty 框架的一大亮點(diǎn)是基于EventLoop 的高效線程模型.它是一個(gè)高性能、異步事件驅(qū)動(dòng)的NIO 框架,所有IO 操作都是異步非阻塞的.高性能的Netty 可以處理數(shù)萬(wàn)終端的連接和數(shù)據(jù)收發(fā).

Netty 通過(guò)bind()方法監(jiān)聽(tīng)9300 端口,等待終端連接.當(dāng)終端上報(bào)數(shù)據(jù)時(shí),繼承自ChannelInboundHandler Adapter 的GatewayHandler 類(lèi)的channelRead 方法接收數(shù)據(jù)并解析報(bào)警.然后通過(guò)jedis 的publish 方法發(fā)布報(bào)警到Redis 里面.核心代碼如下:

在本系統(tǒng)中,Redis 既用作了緩存數(shù)據(jù)庫(kù),也充當(dāng)了消息隊(duì)列.Redis 服務(wù)器采用了6 個(gè)Redis 節(jié)點(diǎn)集群的方式部署,包括3 個(gè)主節(jié)點(diǎn),3 個(gè)從節(jié)點(diǎn).這樣可以做到自動(dòng)分配數(shù)據(jù)到不同的節(jié)點(diǎn)上,提高了性能.部分節(jié)點(diǎn)失效的情況下還能夠繼續(xù)提供服務(wù),提高了系統(tǒng)的高可用性.

Websocket 推送服務(wù)采用開(kāi)源netty-socketio 方案(https://github.com/mrniko/netty-socketio).它是Socket.io 服務(wù)器端的一個(gè)基于Netty 框架的Java 實(shí)現(xiàn).它功能非常強(qiáng)大,簡(jiǎn)單易用,穩(wěn)定可靠.

Netty-socketio 推送服務(wù)的ConnectListener 監(jiān)聽(tīng)了Websocket 連接事件.當(dāng)用戶(hù)通過(guò)瀏覽器登錄本系統(tǒng),服務(wù)端會(huì)收到一個(gè)唯一標(biāo)識(shí)(UUID).Clients 集合保存了所有已登錄用戶(hù)的標(biāo)識(shí).當(dāng)終端上報(bào)一條報(bào)警數(shù)據(jù)后,程序從數(shù)據(jù)庫(kù)查詢(xún)?cè)搱?bào)警對(duì)應(yīng)的車(chē)輛,再根據(jù)車(chē)輛和用戶(hù)的關(guān)系,查找到該報(bào)警需要通知的一個(gè)或多個(gè)用戶(hù).如果用戶(hù)的個(gè)人設(shè)置里配置了接收?qǐng)?bào)警推送,則從clients 集合里查找到該用戶(hù)對(duì)應(yīng)的Websocket連接,將該報(bào)警通過(guò)此連接推送到web 前端.Websocket推送服務(wù)核心代碼如下:

前端引入socket.io.js 監(jiān)聽(tīng)Websocket 事件,例如建立連接、斷開(kāi)連接、收到數(shù)據(jù)等事件[12].當(dāng)收到報(bào)警時(shí),js 解析報(bào)警內(nèi)容,將結(jié)果展示在web 界面.核心代碼如下所示:

整個(gè)前端頁(yè)面包含了一套完整的車(chē)聯(lián)網(wǎng)平臺(tái),包括車(chē)輛監(jiān)控、軌跡回放、報(bào)警處理、指令下發(fā)、報(bào)表查詢(xún)等功能.報(bào)警推送只是其中一個(gè)模塊.當(dāng)前端收到報(bào)警推送時(shí),通過(guò)彈框和播放聲音等方式明顯提示用戶(hù).車(chē)輛監(jiān)控、報(bào)警處理、報(bào)表查詢(xún)等功能也會(huì)同步刷新報(bào)警數(shù)據(jù).

4 系統(tǒng)測(cè)試與分析

系統(tǒng)測(cè)試環(huán)境如下:服務(wù)器硬件配置為16 核,8 GB內(nèi)存.服務(wù)器操作系統(tǒng)為Centos 7.Java 使用Oracle JDK1.8.0_171.Web 服務(wù)器使用Tomcat 8.5.32.Redis 版本為4.0.10.Netty-socketio 版本為1.7.13.客戶(hù)端環(huán)境為Windows 10 操作系統(tǒng),瀏覽器為支持Websocket 的Google Chrome 67.0.3396.99.

我們定義報(bào)警的延遲為:從終端產(chǎn)生報(bào)警的時(shí)間到用戶(hù)瀏覽器收到報(bào)警的時(shí)間差.嚴(yán)格測(cè)試報(bào)警延遲,需要先將終端和用戶(hù)電腦校時(shí).這里我們使用模擬終端巧妙回避校時(shí)的問(wèn)題.模擬終端是一個(gè)可運(yùn)行在Windows 上的程序.它模擬了車(chē)載終端的數(shù)據(jù)采集、網(wǎng)絡(luò)數(shù)據(jù)收發(fā)邏輯.將模擬終端和瀏覽器運(yùn)行在同一臺(tái)Windows 電腦上,比較終端產(chǎn)生報(bào)警的時(shí)間戳和瀏覽接收到報(bào)警的時(shí)間戳,即可計(jì)算出報(bào)警推送的延遲.

使用圖2 所示模擬終端發(fā)送測(cè)試數(shù)據(jù).通過(guò)模擬終端數(shù)據(jù)發(fā)送時(shí)間和Chrome 開(kāi)發(fā)者工具控制臺(tái)日志輸出時(shí)間可以計(jì)算報(bào)警延遲.每秒推送一次報(bào)警,共推送100 條報(bào)警數(shù)據(jù),從終端上傳報(bào)警數(shù)據(jù)到瀏覽器收到報(bào)警推送的時(shí)間延遲平均值為8 ms.傳統(tǒng)AJAX 輪詢(xún)間隔大約是10 到30 s.可見(jiàn)報(bào)警實(shí)時(shí)性大大提高.

圖2 模擬終端報(bào)警配置界面

采用開(kāi)源工具apache jmeter 對(duì)netty-socketio 服務(wù)器作了壓力測(cè)試.Jmeter 的Websocket Sampler 插件可以模擬Websocket 并發(fā)連接.在每個(gè)并發(fā)連接數(shù)下,推送100 條數(shù)據(jù),取推送延遲的平均值.測(cè)試結(jié)果如圖3所示.結(jié)果表明,隨著Websocket 并發(fā)連接數(shù)增長(zhǎng),推送延遲并未出現(xiàn)大幅度增長(zhǎng),而是在7.5 ms 左右波動(dòng).這也反映出netty-socketio 的高并發(fā)、低延遲特性.

圖3 Websocket 推送延遲與并發(fā)連接數(shù)曲線

把模擬終端的數(shù)據(jù)上報(bào)時(shí)間間隔設(shè)定成1 s,連續(xù)發(fā)送1000 條報(bào)警數(shù)據(jù).瀏覽器控制臺(tái)輸出數(shù)據(jù)表明接收到1000 條報(bào)警.這說(shuō)明Websocket 并未丟失任何一條數(shù)據(jù),不會(huì)出現(xiàn)AJAX 方式的報(bào)警覆蓋問(wèn)題,報(bào)警推送的準(zhǔn)確性得到保證.

通過(guò)Chrome 瀏覽器開(kāi)發(fā)者工具查看網(wǎng)絡(luò)連接,當(dāng)頁(yè)面加載時(shí),服務(wù)響應(yīng)的HTTP 頭信息中包含了這兩項(xiàng):Connection:Upgrade 和Upgrade:Websocket,可知客戶(hù)端和服務(wù)器在握手期間從HTTP 協(xié)議升級(jí)為Websocket協(xié)議.之后Websocket 一直保持長(zhǎng)連接.而AJAX 輪詢(xún)時(shí),每次建立HTTP 連接,都要發(fā)送HTTP 報(bào)頭等信息.通過(guò)wireshark 抓包軟件可知,通常一次HTTP 請(qǐng)求和響應(yīng),需要發(fā)送大約570 B 的HTTP 頭部信息[5].這個(gè)HTTP 報(bào)頭甚至比消息本身還要大.而使用Websocket的額外開(kāi)銷(xiāo)只有2 B,建立連接之后便可以二進(jìn)制幀格式傳輸純數(shù)據(jù).我們假定一次報(bào)警的數(shù)據(jù)為50 B.通過(guò)AJAX 方式拉取1000 條報(bào)警生產(chǎn)的網(wǎng)絡(luò)流量為:(570+50)×1000=620 000 B.而通過(guò)Websocket傳輸?shù)木W(wǎng)絡(luò)流量為(2+50)×1000=52 000 B.AJAX 方式產(chǎn)生的網(wǎng)絡(luò)流量是Websocket 網(wǎng)絡(luò)流量的11 倍.當(dāng)報(bào)警推送量大后,Websocket 比AJAX 輪詢(xún)節(jié)省大量的網(wǎng)絡(luò)流量.

由于主流的瀏覽器已經(jīng)支持Websocket,前端socket.io.js 也具有較好的自適應(yīng)性,所以整個(gè)系統(tǒng)具有較好的瀏覽器兼容性.經(jīng)過(guò)測(cè)試,報(bào)警推送功能在最新版的Chrome,Firefox,IE11 等常用瀏覽器上均能正常工作并具有較好的性能.

本系統(tǒng)已經(jīng)在生產(chǎn)環(huán)境中使用.該平臺(tái)包含4.5 萬(wàn)臺(tái)入網(wǎng)終端,其中大約2.1 萬(wàn)在線終端.日均產(chǎn)生報(bào)警數(shù)據(jù)750 萬(wàn)條左右.平均每秒鐘推送86 條報(bào)警.服務(wù)器的CPU、內(nèi)存和網(wǎng)絡(luò)均保持較低壓力狀態(tài).客戶(hù)端Chrome 瀏覽器的CPU 和內(nèi)存占用保持平穩(wěn),說(shuō)明瀏覽器能承受如此大量的報(bào)警推送.系統(tǒng)已經(jīng)穩(wěn)定運(yùn)行數(shù)月,證明這是一套可用于生產(chǎn)環(huán)境的穩(wěn)定系統(tǒng).

5 結(jié)束語(yǔ)

根據(jù)車(chē)聯(lián)網(wǎng)的特定業(yè)務(wù)場(chǎng)景,設(shè)計(jì)了一種基于Websocket 技術(shù)的車(chē)聯(lián)網(wǎng)報(bào)警推送系統(tǒng).對(duì)比AJAX 輪詢(xún)技術(shù)和Websocket 技術(shù)可知,使用Websocket 方案以后,大大降低報(bào)警的推送延遲,提高了報(bào)警推送的吞吐量,保證報(bào)警信息及時(shí)準(zhǔn)確地推送到客戶(hù).隨著HTML5 技術(shù)的普及,Websocket 將逐漸成為Web 實(shí)時(shí)通信的主流技術(shù).

本文介紹的方案解決了報(bào)警實(shí)時(shí)性和準(zhǔn)確性等問(wèn)題.但是當(dāng)數(shù)萬(wàn)終端每天產(chǎn)生750 萬(wàn)報(bào)警數(shù)據(jù)時(shí),如何讓用戶(hù)方便查看并處理海量報(bào)警成了新的問(wèn)題.報(bào)警聚合和報(bào)警聯(lián)動(dòng)將是后續(xù)研究的方向.

猜你喜歡
用戶(hù)系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
關(guān)注用戶(hù)
關(guān)注用戶(hù)
關(guān)注用戶(hù)
Camera360:拍出5億用戶(hù)
主站蜘蛛池模板: 日韩毛片免费观看| 尤物成AV人片在线观看| 久草网视频在线| 91视频青青草| 亚洲视屏在线观看| 国产福利微拍精品一区二区| 影音先锋丝袜制服| 国产成a人片在线播放| 国产成人a在线观看视频| 国产凹凸视频在线观看| 欧美精品H在线播放| 2022精品国偷自产免费观看| 91精品国产自产在线老师啪l| 欧美精品成人| 五月天久久婷婷| 国产精品人莉莉成在线播放| 四虎在线观看视频高清无码 | 老司机精品一区在线视频| 日韩精品成人网页视频在线| 成人福利在线免费观看| 91成人在线免费视频| 丁香婷婷在线视频| 一级一级一片免费| 亚洲毛片一级带毛片基地| 久久情精品国产品免费| 国产av无码日韩av无码网站| 华人在线亚洲欧美精品| 国产欧美日韩91| 欧美日韩一区二区在线播放 | 久草视频一区| 国产人人射| 亚洲中文字幕日产无码2021| 国产精品久久久久婷婷五月| 国产亚洲现在一区二区中文| 尤物在线观看乱码| 欧美三级不卡在线观看视频| 激情综合激情| 伊人久久大香线蕉成人综合网| 国产视频久久久久| 久久国产精品波多野结衣| 九九热精品视频在线| 自偷自拍三级全三级视频| a天堂视频在线| 伊人中文网| 国产黄色爱视频| 国产欧美成人不卡视频| 性视频一区| 久久一本日韩精品中文字幕屁孩| 91精品国产91久久久久久三级| 久久亚洲美女精品国产精品| 手机精品福利在线观看| 国产高清毛片| 欧美成人亚洲综合精品欧美激情| 国产99视频在线| 欧美h在线观看| 美女国内精品自产拍在线播放| 久久综合色88| 99国产精品免费观看视频| 国产一区二区丝袜高跟鞋| 亚洲中字无码AV电影在线观看| 任我操在线视频| 欧美在线综合视频| 欧美一区福利| 国产浮力第一页永久地址 | 亚洲综合天堂网| 久久婷婷综合色一区二区| 精品丝袜美腿国产一区| 91久久偷偷做嫩草影院电| 亚洲成人免费在线| 狠狠综合久久| 国产成人无码Av在线播放无广告| 亚洲中文字幕国产av| 在线a视频免费观看| 青青网在线国产| 无遮挡一级毛片呦女视频| 香蕉网久久| 国产极品美女在线播放| 中文字幕不卡免费高清视频| 国产福利不卡视频| 中文毛片无遮挡播放免费| 天天躁夜夜躁狠狠躁图片| 国产福利不卡视频|