日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

基于WebSocket+Vue的實(shí)時(shí)聊天室畢業(yè)設(shè)計(jì)全解析

基于WebSocket+Vue的實(shí)時(shí)聊天室畢業(yè)設(shè)計(jì)全解析 簡(jiǎn)介這是一份面向計(jì)算機(jī)專業(yè)本科生的畢業(yè)設(shè)計(jì)級(jí)全棧項(xiàng)目資源聚焦實(shí)時(shí)通信場(chǎng)景基于WebSocket協(xié)議與Vue.js框架實(shí)現(xiàn)輕量級(jí)在線聊天室系統(tǒng)有效解決傳統(tǒng)HTTP輪詢?cè)诩磿r(shí)消息交互中的高延遲與低效問(wèn)題。資源包共33個(gè)文件含15個(gè)JavaScript邏輯文件涵蓋WebSocket連接管理、消息處理與狀態(tài)更新、2個(gè)Vue組件文件聊天界面與用戶列表、2個(gè)Stylus樣式文件、3個(gè)SVG圖標(biāo)資源及README等工程配置文件整體僅140KB結(jié)構(gòu)精簡(jiǎn)、開箱即用。已有156人學(xué)習(xí)下載適合Vue前端入門者結(jié)合WebSocket實(shí)踐理解雙向通信機(jī)制。讀者可直接運(yùn)行調(diào)試完整前后端交互流程掌握Vue實(shí)例生命周期鉤子在連接建立/斷開時(shí)的應(yīng)用、響應(yīng)式數(shù)據(jù)綁定驅(qū)動(dòng)消息實(shí)時(shí)渲染、以及基于原生WebSocket API的消息收發(fā)與錯(cuò)誤重連邏輯是鍛煉全棧思維與實(shí)時(shí)應(yīng)用開發(fā)能力的典型教學(xué)案例。 帶畢業(yè)設(shè)計(jì)這些年有個(gè)很深的體會(huì)十個(gè)選題里至少一半都在做“某某系統(tǒng)”庫(kù)存管理系統(tǒng)、圖書管理系統(tǒng)、點(diǎn)餐系統(tǒng)滿天飛。而“基于WebSocketVue的網(wǎng)絡(luò)聊天室”屬于少數(shù)幾個(gè)讓我眼前一亮、又替學(xué)生捏把汗的題目。為什么因?yàn)樗翱雌饋?lái)簡(jiǎn)單”——無(wú)非是發(fā)消息、收消息但做扎實(shí)了它能把協(xié)議、并發(fā)、狀態(tài)管理、前后端聯(lián)調(diào)、部署運(yùn)維全部串起來(lái)一個(gè)項(xiàng)目吃透一整條技術(shù)棧。本文就圍繞這個(gè)畢業(yè)設(shè)計(jì)把選題思路、技術(shù)選型、核心功能拆解、踩坑實(shí)錄完整梳理一遍。不管你是準(zhǔn)備拿這個(gè)題目做畢設(shè)還是工作中第一次接觸WebSocket或者只是好奇一個(gè)聊天室背后的門道這篇文章都值得你花十五分鐘讀完。我會(huì)把代碼結(jié)構(gòu)、關(guān)鍵實(shí)現(xiàn)、運(yùn)維配置、答辯可能被問(wèn)到的問(wèn)題統(tǒng)統(tǒng)展開避免你在“能跑”和“做好”之間迷失方向。1. 內(nèi)容整體設(shè)計(jì)與思路拆解1.1 為什么聊天室一定要選WebSocket先說(shuō)結(jié)論聊天室這個(gè)業(yè)務(wù)場(chǎng)景幾乎是為WebSocket量身定做的。如果你用傳統(tǒng)的HTTP輪詢?nèi)プ鰧?shí)時(shí)聊天前端每?jī)擅氚l(fā)一個(gè)GET請(qǐng)求問(wèn)服務(wù)器“有沒(méi)有新消息”在用戶量少的時(shí)候確實(shí)也能跑但這屬于典型的“能用”和“好用”之間的差距。每一次輪詢都要攜帶完整的HTTP請(qǐng)求頭服務(wù)器每次都要重新建立連接消息實(shí)時(shí)性還取決于輪詢間隔——你把間隔設(shè)成1秒服務(wù)器壓力大設(shè)成5秒用戶發(fā)完消息等5秒才看到自己說(shuō)的話體驗(yàn)很差。WebSocket和HTTP的本質(zhì)區(qū)別在于它在客戶端和服務(wù)器之間建立了一條全雙工的TCP長(zhǎng)連接。什么意思HTTP是你問(wèn)一句、我答一句WebSocket是兩邊隨時(shí)都能主動(dòng)說(shuō)話。服務(wù)器有了新消息可以直接推給客戶端不需要客戶端反復(fù)來(lái)問(wèn)。這個(gè)特性放在聊天場(chǎng)景里就是剛需A用戶發(fā)消息服務(wù)器要立刻把這條消息推給B用戶只有WebSocket能干凈利落地做到。當(dāng)然也許有人會(huì)提SSEServer-Sent Events服務(wù)端單向推送。SSE確實(shí)能解決服務(wù)器到客戶端的推送問(wèn)題實(shí)現(xiàn)起來(lái)也比WebSocket簡(jiǎn)單。但它是單向的客戶端只能通過(guò)普通的HTTP請(qǐng)求往服務(wù)器發(fā)數(shù)據(jù)雙向通信還是得靠額外的HTTP接口配合。聊天室需要的是雙向高頻交互SSE硬套上去反而別扭。所以WebSocket是聊天室的主流選擇也是這道題目作為畢設(shè)的核心價(jià)值所在。1.2 技術(shù)棧選型為什么前端是Vue后端怎么配這個(gè)題目里的技術(shù)棧是“WebSocket Vue”前端選Vue而不是React或者原生JS主要有三個(gè)原因第一Vue的學(xué)習(xí)曲線平緩。它的核心思想是數(shù)據(jù)驅(qū)動(dòng)視圖你只需要維護(hù)一個(gè)messages數(shù)組頁(yè)面上就會(huì)自動(dòng)渲染出消息列表不需要像原生JS那樣手動(dòng)操作DOM去appendChild。對(duì)于基礎(chǔ)薄弱的同學(xué)來(lái)說(shuō)Vue的上手難度明顯低于ReactJSX、Hooks這些概念確實(shí)有一定門檻。第二Vue生態(tài)足夠成熟面試和工作中都用得上。Vue Router負(fù)責(zé)頁(yè)面跳轉(zhuǎn)、Vuex/Pinia管理用戶狀態(tài)、Element Plus提供聊天界面的UI組件這些配套工具鏈都能在畢設(shè)中體現(xiàn)出來(lái)既是加分項(xiàng)也是你未來(lái)找工作時(shí)實(shí)實(shí)在在的技能點(diǎn)。第三Vue的響應(yīng)式機(jī)制和聊天室場(chǎng)景天然契合。消息列表渲染、用戶在線狀態(tài)變化、未讀消息數(shù)字變動(dòng)……這些都適合用響應(yīng)式數(shù)據(jù)去驅(qū)動(dòng)。至于后端絕大多數(shù)學(xué)生選的是Spring Boot原因很簡(jiǎn)單Java是很多學(xué)校的主修語(yǔ)言Spring Boot的WebSocket支持也做得比較完善一個(gè)ServerEndpoint注解就能開啟WebSocket接口配合Spring的依賴注入可以很容易地管理會(huì)話。當(dāng)然也有同學(xué)用Node.jsws庫(kù)或者Netty來(lái)做Netty性能更好但代碼復(fù)雜度高我個(gè)人建議畢設(shè)階段用Spring Boot原生WebSocket就夠了把精力留給業(yè)務(wù)功能而不是底層網(wǎng)絡(luò)編程。1.3 功能邊界畢業(yè)設(shè)計(jì)做到什么程度才算優(yōu)秀很多同學(xué)做畢設(shè)有個(gè)誤區(qū)一開始就想著要做一個(gè)微信出來(lái)語(yǔ)音、圖片、視頻、朋友圈全都要。結(jié)果一個(gè)月過(guò)去了光登錄注冊(cè)就卡在驗(yàn)證碼上最后交上去一個(gè)半個(gè)殘缺品。聊天室這個(gè)題目核心功能應(yīng)該圍繞“一個(gè)能用的即時(shí)通訊工具”來(lái)收斂用戶注冊(cè)與登錄必須好友管理選做如果有好友關(guān)系能加分創(chuàng)建房間 / 加入房間必須多房間是聊天室的基礎(chǔ)形態(tài)實(shí)時(shí)收發(fā)文本消息必須最核心在線用戶列表與上下線提醒必須體現(xiàn)WebSocket的實(shí)時(shí)性歷史消息記錄必須涉及數(shù)據(jù)庫(kù)設(shè)計(jì)和分頁(yè)加載消息已讀/未讀選做實(shí)現(xiàn)起來(lái)有挑戰(zhàn)我見過(guò)做得特別好的版本是在這個(gè)基礎(chǔ)上加了“對(duì)方正在輸入”狀態(tài)和離線消息推送這兩個(gè)功能都很能體現(xiàn)對(duì)WebSocket協(xié)議的理解深度答辯時(shí)老師一聽就覺(jué)得這是你真正做過(guò)、思考過(guò)的。相比之下花大量時(shí)間去調(diào)一個(gè)炫酷的CSS動(dòng)效反而不是這個(gè)項(xiàng)目的核心得分點(diǎn)。2. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)2.1 WebSocket消息協(xié)議聊天的“通用語(yǔ)言”整個(gè)聊天室最重要的設(shè)計(jì)不是界面有多漂亮而是客戶端和服務(wù)器之間消息格式的統(tǒng)一約定。WebSocket本身只負(fù)責(zé)傳輸數(shù)據(jù)它不關(guān)心你傳的是文本、JSON還是二進(jìn)制。如果雙方?jīng)]有一個(gè)約定的協(xié)議消息就無(wú)從解析。我見過(guò)不少失敗的項(xiàng)目前端直接往服務(wù)器發(fā)裸字符串“你好”服務(wù)器也直接回一個(gè)“收到了”消息內(nèi)容全靠硬編碼去匹配。這種寫法在只有兩條測(cè)試消息時(shí)沒(méi)問(wèn)題一旦要區(qū)分“聊天消息”“系統(tǒng)通知”“在線狀態(tài)變化”“心跳包”這幾種不同類型就全亂套了。我建議在項(xiàng)目一開始就定義一套統(tǒng)一的JSON消息格式大致這樣{ type: chat, from: user_123, to: user_456, roomId: room_001, content: 你好世界, timestamp: 1735000000000 }type字段是整個(gè)協(xié)議的核心它告訴接收方這條消息是什么類型。常見取值有chat普通聊天消息system系統(tǒng)通知比如“用戶xx加入了房間”heartbeat心跳消息用來(lái)維持連接后面細(xì)說(shuō)online/offline用戶上線/下線通知history歷史消息請(qǐng)求或響應(yīng)后端收到消息后先解析JSON再根據(jù)type做分發(fā)而不是把所有消息一視同仁地廣播。這個(gè)設(shè)計(jì)看似簡(jiǎn)單但它決定了你的代碼能不能擴(kuò)展。比如你以后想加一個(gè)“撤回消息”功能只需要在協(xié)議里加一個(gè)recall類型前端和后端各加一個(gè)分支處理就行不需要?jiǎng)悠渌a。2.2 心跳機(jī)制保活連接的關(guān)鍵一步這是個(gè)特別容易被忽略、但上線后幾乎必然出問(wèn)題的點(diǎn)。WebSocket連接雖然叫“長(zhǎng)連接”但它不是永久的。網(wǎng)絡(luò)設(shè)備尤其是NAT路由器、負(fù)載均衡器會(huì)定期清理空閑的連接如果一個(gè)WebSocket連接在幾分鐘內(nèi)沒(méi)有數(shù)據(jù)交互就可能被中間設(shè)備悄悄掐斷。而更麻煩的是TCP連接被掐斷后客戶端和服務(wù)器不一定能立刻感知到兩邊都以為連接還活著直到某一方真正發(fā)送數(shù)據(jù)時(shí)才觸發(fā)錯(cuò)誤。解決辦法就是心跳機(jī)制客戶端每隔一段時(shí)間比如30秒發(fā)送一個(gè)heartbeat消息服務(wù)器收到后回一個(gè)pong或者同樣是一個(gè)JSON心跳包。如果服務(wù)器在設(shè)定時(shí)間內(nèi)沒(méi)收到任何消息就認(rèn)為客戶端已經(jīng)掉線主動(dòng)關(guān)閉連接并清理在線狀態(tài)客戶端如果連續(xù)幾次沒(méi)收到服務(wù)器的心跳響應(yīng)就觸發(fā)重新連接邏輯。這里有兩個(gè)實(shí)現(xiàn)上的坑一是心跳消息不能和業(yè)務(wù)消息混在一起做判斷。服務(wù)器判斷客戶端是否在線應(yīng)該基于“收到任意消息的時(shí)間戳”而不是“收到心跳消息的時(shí)間戳”。否則客戶端在聊天、但心跳定時(shí)器被瀏覽器掛起比如頁(yè)面切到后臺(tái)標(biāo)簽頁(yè)服務(wù)器就會(huì)誤判掉線。二是前端心跳定時(shí)器要注意清理。Vue組件銷毀時(shí)比如用戶退出登錄必須清除定時(shí)器并主動(dòng)關(guān)閉WebSocket連接。不然組件重建一次就新建一個(gè)連接舊的連接又沒(méi)關(guān)很快就會(huì)把服務(wù)器的連接數(shù)打滿。2.3 在線狀態(tài)管理不要天真地以為連接在就等于人在聊天的核心體驗(yàn)之一是你能看到誰(shuí)在線、誰(shuí)下線了。很多同學(xué)的第一版實(shí)現(xiàn)是客戶端一連接成功就向服務(wù)器上報(bào)“我上線了”服務(wù)器廣播給所有人。這個(gè)思路本身沒(méi)問(wèn)題但它只解決了“連接建立”這一層。真實(shí)場(chǎng)景中用戶可能登錄了但頁(yè)面在后臺(tái)連接因?yàn)榫W(wǎng)絡(luò)波動(dòng)斷開了這時(shí)候服務(wù)器不能還認(rèn)為用戶在線。所以我的建議是在線狀態(tài)以“心跳是否正?!睘闇?zhǔn)而不是以“是否建立過(guò)連接”為準(zhǔn)。具體做法是服務(wù)器維護(hù)一張?jiān)诰€用戶表每條記錄包含用戶ID、WebSocket會(huì)話對(duì)象、最后活躍時(shí)間。服務(wù)器啟動(dòng)一個(gè)定時(shí)任務(wù)定期掃描這張表把最后活躍時(shí)間超過(guò)閾值的用戶標(biāo)記為離線并廣播下線通知。這個(gè)方案比“斷開連接時(shí)通知下線”可靠得多因?yàn)門CP斷開的感知是有延遲的而心跳掃描是主動(dòng)的、確定性的。此外還有一個(gè)細(xì)節(jié)值得注意同一個(gè)用戶在不同標(biāo)簽頁(yè)登錄會(huì)產(chǎn)生多條WebSocket連接。如果你不處理服務(wù)器會(huì)認(rèn)為這個(gè)用戶在線了多次廣播時(shí)也會(huì)給每個(gè)連接都發(fā)一份。處理方案是允許一個(gè)用戶ID關(guān)聯(lián)多個(gè)會(huì)話廣播時(shí)遍歷所有會(huì)話或者后登錄的踢掉先登錄的像微信網(wǎng)頁(yè)版那樣“該賬號(hào)已在別處登錄”。哪種方案更好看你的場(chǎng)景。畢設(shè)階段我建議做后一種實(shí)現(xiàn)簡(jiǎn)單還能在答辯時(shí)解釋“強(qiáng)制下線”的業(yè)務(wù)邏輯。2.4 前端Vue組件結(jié)構(gòu)與狀態(tài)設(shè)計(jì)前端如果全堆在一個(gè)文件里后期會(huì)非常痛苦。我的建議是把項(xiàng)目拆成以下幾個(gè)核心模塊views/Login.vue登錄注冊(cè)頁(yè)views/Chat.vue聊天主頁(yè)面包含房間列表、消息列表、輸入框store/user.js用戶狀態(tài)管理登錄狀態(tài)、用戶信息、當(dāng)前房間utils/websocket.jsWebSocket封裝連接、消息發(fā)送、心跳、重連api/auth.js登錄注冊(cè)的HTTP請(qǐng)求這里最值得用心寫的是utils/websocket.js。不要在每個(gè)頁(yè)面組件里單獨(dú)創(chuàng)建WebSocket對(duì)象因?yàn)榱奶焓业亩鄠€(gè)頁(yè)面比如房間列表頁(yè)和聊天對(duì)話頁(yè)可能都需要使用同一個(gè)連接。把WebSocket封裝成一個(gè)單例導(dǎo)出connect、send、onMessage、disconnect這幾個(gè)方法頁(yè)面組件只需要訂閱消息類型即可。這樣連接生命周期可由一個(gè)模塊統(tǒng)一管理不會(huì)出現(xiàn)重復(fù)連接或消息丟失。狀態(tài)管理方面推薦用PiniaVue 3或者VuexVue 2保存用戶信息和當(dāng)前連接狀態(tài)。要特別注意的是WebSocket對(duì)象本身不適合放進(jìn)響應(yīng)式store里因?yàn)閂ue會(huì)對(duì)響應(yīng)式數(shù)據(jù)進(jìn)行深度代理處理WebSocket對(duì)象時(shí)容易出現(xiàn)各種詭異問(wèn)題。正確的做法是store里面保存connectionStatus‘connected’、‘disconnected’、‘reconnecting’這樣的狀態(tài)標(biāo)記真正的WebSocket實(shí)例放在一個(gè)普通的單例模塊里。3. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 前端WebSocket封裝連接、重連、心跳一網(wǎng)打盡直接分享一份我實(shí)際項(xiàng)目中用著比較順手的封裝思路。// utils/websocket.js class WSClient { constructor(url) { this.url url this.ws null this.heartbeatTimer null this.reconnectTimer null this.reconnectAttempts 0 this.listeners {} } connect() { return new Promise((resolve, reject) { this.ws new WebSocket(this.url) this.ws.onopen () { this.reconnectAttempts 0 this.startHeartbeat() this.emit(open) resolve() } this.ws.onmessage (event) { let data null try { data JSON.parse(event.data) } catch (e) { console.warn(無(wú)法解析的消息, event.data) return } this.emit(data.type, data) } this.ws.onclose () { this.stopHeartbeat() this.emit(close) this.handleReconnect() } this.ws.onerror (error) { this.emit(error, error) } }) } send(type, payload) { if (this.ws this.ws.readyState WebSocket.OPEN) { const message JSON.stringify({ type, ...payload, timestamp: Date.now() }) this.ws.send(message) } else { console.warn(WebSocket未連接消息發(fā)送失敗) } } startHeartbeat() { this.heartbeatTimer setInterval(() { this.send(heartbeat, {}) }, 30000) } stopHeartbeat() { if (this.heartbeatTimer) { clearInterval(this.heartbeatTimer) this.heartbeatTimer null } } handleReconnect() { if (this.reconnectAttempts 5) { console.error(重連次數(shù)過(guò)多停止重連) return } const delay Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000) this.reconnectAttempts 1 this.reconnectTimer setTimeout(() { this.connect() }, delay) } on(type, callback) { if (!this.listeners[type]) { this.listeners[type] [] } this.listeners[type].push(callback) } emit(type, data) { if (this.listeners[type]) { this.listeners[type].forEach(cb cb(data)) } } } export default new WSClient()幾個(gè)關(guān)鍵點(diǎn)值得展開重連策略采用指數(shù)退避。第一次重連等1秒第二次等2秒第三次等4秒……以此類推最多等30秒。這么設(shè)計(jì)是有講究的如果服務(wù)器真的掛了你每秒重連一次會(huì)讓服務(wù)器雪上加霜指數(shù)退避能有效減小服務(wù)器在故障恢復(fù)期間的壓力。很多生產(chǎn)環(huán)境的實(shí)時(shí)系統(tǒng)都采用類似策略這個(gè)細(xì)節(jié)在答辯時(shí)可以主動(dòng)講出來(lái)是加分項(xiàng)。心跳定時(shí)器一定要在onclose里停掉。否則連接已經(jīng)斷了定時(shí)器還在定時(shí)發(fā)送消息雖然send方法里會(huì)檢查readyState但白白浪費(fèi)性能還容易在控制臺(tái)刷出一堆警告。onmessage里的JSON解析要做容錯(cuò)。WebSocket對(duì)傳輸內(nèi)容沒(méi)有格式限制如果服務(wù)器端偶爾返回了一段非JSON文本比如調(diào)試信息前端直接JSON.parse會(huì)拋異常導(dǎo)致整個(gè)處理流程中斷。這種情況在開發(fā)聯(lián)調(diào)階段非常常見加一個(gè)try-catch能省掉很多排查問(wèn)題的時(shí)間。3.2 后端Spring Boot的WebSocket實(shí)現(xiàn)后端我以Spring Boot為例。Spring Boot對(duì)WebSocket的支持有兩種方式一種是基于ServerEndpoint的JSR-356標(biāo)準(zhǔn)一種是繼承TextWebSocketHandler。對(duì)于聊天室場(chǎng)景我推薦用后者因?yàn)镾pring的WebSocketHandler能更好地和Spring的依賴注入整合。Component public class ChatWebSocketHandler extends TextWebSocketHandler { // userId - WebSocketSession private static final ConcurrentHashMapString, WebSocketSession SESSIONS new ConcurrentHashMap(); Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 連接建立時(shí)通常會(huì)從URL參數(shù)或請(qǐng)求頭中解析出用戶ID String userId parseUserId(session); SESSIONS.put(userId, session); // 廣播在線通知 broadcast(new ChatMessage(system, userId, 加入聊天室)); } Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload message.getPayload(); ChatMessage chatMessage JSON.parseObject(payload, ChatMessage.class); switch (chatMessage.getType()) { case chat: // 保存消息到數(shù)據(jù)庫(kù) messageService.save(chatMessage); // 發(fā)送給目標(biāo)用戶或房間內(nèi)所有用戶 sendToRoom(chatMessage.getRoomId(), chatMessage); break; case heartbeat: // 心跳響應(yīng)直接返回一個(gè)pong即可 session.sendMessage(new TextMessage({\type\:\pong\})); break; case recall: // 消息撤回邏輯 break; default: break; } } Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { // 移除會(huì)話并廣播下線通知 } }這里有一個(gè)特別容易踩的坑SESSIONS這個(gè)靜態(tài)Map在并發(fā)量上來(lái)之后會(huì)變成性能瓶頸或者出各種并發(fā)問(wèn)題。用ConcurrentHashMap是基本操作但如果你要按房間維度管理會(huì)話“給room_001里所有人發(fā)消息”更好的方式是維護(hù)一個(gè)MapString, SetWebSocketSession的嵌套結(jié)構(gòu)key是房間IDvalue是房間里所有用戶的會(huì)話集合。這樣廣播時(shí)只需要遍歷一個(gè)房間的會(huì)話而不是遍歷全部在線用戶然后逐個(gè)判斷他在不在那個(gè)房間。另一個(gè)問(wèn)題是WebSocketSession不是線程安全的。多個(gè)線程同時(shí)往同一個(gè)session里sendMessage會(huì)有競(jìng)爭(zhēng)問(wèn)題。一個(gè)簡(jiǎn)單的處理方式是對(duì)session的發(fā)送操作加鎖或者使用ConcurrentWebSocketSessionDecorator來(lái)包裝session。3.3 消息存儲(chǔ)歷史記錄的數(shù)據(jù)庫(kù)設(shè)計(jì)聊天室如果不保存歷史消息刷新頁(yè)面后聊天記錄全沒(méi)了這個(gè)體驗(yàn)是絕對(duì)不能接受的。所以必須引入數(shù)據(jù)庫(kù)。消息表的設(shè)計(jì)可以非常簡(jiǎn)潔CREATE TABLE chat_message ( id BIGINT AUTO_INCREMENT PRIMARY KEY, room_id VARCHAR(64) NOT NULL, sender_id VARCHAR(64) NOT NULL, sender_name VARCHAR(64) NOT NULL, content TEXT NOT NULL, message_type TINYINT NOT NULL DEFAULT 0 COMMENT 0-文本消息, create_time BIGINT NOT NULL COMMENT 毫秒時(shí)間戳 );如果做了離線消息可以再加一張offline_message表如果做了好友關(guān)系可以再加friend表。但核心就是上面這一張chat_message表。一個(gè)值得注意的設(shè)計(jì)點(diǎn)不要在聊天室業(yè)務(wù)中頻繁讀寫MySQL。每條消息都實(shí)時(shí)寫入MySQL在高并發(fā)下數(shù)據(jù)庫(kù)扛不住。比較常見的折中方案是異步寫入——先把消息發(fā)到內(nèi)存隊(duì)列或者Redis里再用一個(gè)后臺(tái)線程批量落庫(kù)。畢設(shè)階段如果不想做這么復(fù)雜至少要做到“寫入數(shù)據(jù)庫(kù)的操作不要阻塞消息轉(zhuǎn)發(fā)”可以用Async注解開個(gè)異步線程去執(zhí)行。3.4 歷史消息加載分頁(yè)與滾動(dòng)前端進(jìn)入聊天室后應(yīng)該先拉取最近的歷史消息而不是從空白的輸入框開始。拉取歷史消息用普通的HTTP接口就行沒(méi)必要走WebSocket因?yàn)檫@是“查詢”操作不是“實(shí)時(shí)推送”。接口設(shè)計(jì)成GET /api/rooms/room_001/messages?page1size20前端滾動(dòng)到消息列表頂部時(shí)繼續(xù)加載上一頁(yè)不斷往上追加。這個(gè)實(shí)現(xiàn)里有個(gè)小細(xì)節(jié)加載完上一頁(yè)后要記錄當(dāng)前滾動(dòng)位置否則頁(yè)面會(huì)跳到頂部用戶就找不著自己看到哪了??梢杂胹crollTop和scrollHeight配合計(jì)算保證新增的消息在頂部后滾動(dòng)條位置不變。熱搜詞里提到的“vue keep-alive切換路由子組件el-table滾回頭部”問(wèn)題在聊天室場(chǎng)景里同樣會(huì)出現(xiàn)。如果用戶在聊天頁(yè)滾到了很靠后的位置切到另一個(gè)頁(yè)面再切回來(lái)消息列表滾動(dòng)位置會(huì)丟。解決辦法是用keep-alive緩存聊天頁(yè)組件并在activated鉤子里恢復(fù)滾動(dòng)位置。4. 常見問(wèn)題與排查技巧實(shí)錄4.1 nginx代理WebSocket連接失敗的經(jīng)典坑前端開發(fā)時(shí)直接在本地localhost:8080連WebSocket一切正常。部署到服務(wù)器后前端走nginx反代WebSocket連接死活建立不上控制臺(tái)報(bào)錯(cuò)WebSocket connection to ws://your-domain/ws failed大概率是nginx沒(méi)有配置WebSocket升級(jí)相關(guān)的頭。普通HTTP反向代理和WebSocket反向代理的區(qū)別在于WebSocket需要HTTP Upgrade機(jī)制nginx必須顯式地告訴上游服務(wù)器“這是一個(gè)WebSocket連接”要轉(zhuǎn)發(fā)Upgrade和Connection兩個(gè)請(qǐng)求頭。正確的nginx配置長(zhǎng)這樣location /ws { proxy_pass http://backend-server:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_read_timeout 3600s; proxy_send_timeout 3600s; }proxy_http_version 1.1必須設(shè)置因?yàn)镠TTP/1.0不支持Upgrade頭。proxy_read_timeout和proxy_send_timeout建議設(shè)長(zhǎng)一點(diǎn)比如3600秒否則nginx默認(rèn)60秒沒(méi)有數(shù)據(jù)傳輸就會(huì)主動(dòng)斷開連接你的WebSocket哪怕心跳正常也會(huì)被nginx切斷。4.2 連接異常關(guān)閉狀態(tài)碼1006WebSocket的close事件里code為1006是一種很特殊的狀態(tài)。正常關(guān)閉比如服務(wù)器主動(dòng)關(guān)閉、客戶端主動(dòng)關(guān)閉code會(huì)是1000而1006表示“連接異常關(guān)閉”也就是沒(méi)有收到正常的close幀連接突然斷了。排查1006的思路按照由易到難的順序是服務(wù)器進(jìn)程是否崩了。先看后端日志如果進(jìn)程崩潰或者被OOM Kill所有連接都會(huì)異常斷開。是否有nginx/負(fù)載均衡的超時(shí)設(shè)置。如果心跳間隔超過(guò)nginx的proxy_read_timeoutnginx會(huì)先斷客戶端側(cè)看到的就是1006。網(wǎng)絡(luò)問(wèn)題。用戶切換網(wǎng)絡(luò)從WiFi切到移動(dòng)網(wǎng)絡(luò)、路由器重啟都會(huì)導(dǎo)致TCP連接斷掉客戶端往往也是1006。服務(wù)器心跳檢測(cè)太激進(jìn)。服務(wù)器如果設(shè)置了“60秒沒(méi)收到消息就斷開”而客戶端心跳間隔是90秒那連接必然被服務(wù)器主動(dòng)斷開客戶端側(cè)看到的也是異常關(guān)閉。排除這類問(wèn)題的一個(gè)好習(xí)慣是在服務(wù)端記錄close的CloseStatus和reason。Spring的afterConnectionClosed方法能拿到關(guān)閉狀態(tài)碼和原因這對(duì)定位問(wèn)題非常有幫助。4.3 前后端聯(lián)調(diào)時(shí)的跨域與鑒權(quán)問(wèn)題如果你的前端跑在http://localhost:5173后端跑在http://localhost:8080WebSocket連接同樣存在跨域問(wèn)題。瀏覽器對(duì)WebSocket的跨域限制比HTTP寬松一些不限制跨域請(qǐng)求本身但會(huì)校驗(yàn)服務(wù)端返回的Origin頭不過(guò)還是建議在Spring Boot里配置一下跨域允許避免開發(fā)時(shí)踩不必要的坑。WebSocket的鑒權(quán)方式也值得提前設(shè)計(jì)好。HTTP接口可以用JWT放在Authorization頭里但瀏覽器的WebSocket API不支持自定義請(qǐng)求頭所以常見的做法是把token放在URL參數(shù)上ws://localhost:8080/ws?tokenyour_jwt_token后端在HandshakeInterceptor里攔截握手請(qǐng)求校驗(yàn)token是否有效。注意token放在URL上會(huì)出現(xiàn)在nginx訪問(wèn)日志和歷史記錄里有泄露風(fēng)險(xiǎn)生產(chǎn)環(huán)境不建議這么做。對(duì)于畢設(shè)來(lái)說(shuō)這是簡(jiǎn)單可行的方案但答辯時(shí)如果能主動(dòng)說(shuō)出這個(gè)安全局限性再提出用子協(xié)議Sec-WebSocket-Protocol傳遞token的改進(jìn)方案會(huì)很有技術(shù)深度。4.4 消息丟失與重復(fù)消息的應(yīng)對(duì)策略聊天的復(fù)雜性很大程度上來(lái)自于消息可能有延遲、可能丟失、可能重復(fù)。WebSocket基于TCP能保證連接不中斷時(shí)不丟消息但連接中斷期間的消息比如用戶斷網(wǎng)了30秒再回來(lái)WebSocket是沒(méi)法補(bǔ)償?shù)?。?yīng)對(duì)消息丟失的方案是“離線消息拉取”用戶連接建立后客戶端向服務(wù)器請(qǐng)求“我離線期間有沒(méi)有收到新消息”服務(wù)器根據(jù)離線消息表查詢并推送給客戶端。這個(gè)邏輯在畢設(shè)里可以做一個(gè)簡(jiǎn)化版消息表里加一個(gè)is_read字段用戶上線時(shí)把未讀消息拉取下來(lái)即可。重復(fù)消息則是由于“發(fā)送超時(shí)重試”造成的??蛻舳税l(fā)消息時(shí)網(wǎng)絡(luò)超時(shí)客戶端不確定服務(wù)器有沒(méi)有收到于是重發(fā)了一遍結(jié)果服務(wù)器兩條都收到了對(duì)方看到兩條一模一樣的話。要徹底解決這個(gè)問(wèn)題需要引入消息ID去重——客戶端生成一個(gè)全局唯一的消息ID服務(wù)器把”已經(jīng)處理過(guò)的消息ID“緩存起來(lái)重復(fù)收到就丟棄。畢設(shè)階段如果覺(jué)得太復(fù)雜至少要知道這個(gè)問(wèn)題存在答辯時(shí)有話可說(shuō)。4.5 前端常見的連接泄漏與服務(wù)端連接數(shù)告警我在實(shí)際開發(fā)中見過(guò)一個(gè)很典型的問(wèn)題基于Vue的頁(yè)面用戶反復(fù)切換登錄/登出WebSocket連接數(shù)不斷上漲最后服務(wù)器報(bào)連接數(shù)超限。原因幾乎都是組件銷毀時(shí)沒(méi)有正確關(guān)閉WebSocket。Vue 2的beforeDestroy和Vue 3的onBeforeUnmount生命周期鉤子里要調(diào)用disconnect()關(guān)閉連接并清除定時(shí)器。但要注意如果你把WebSocket封裝成了單例而且多個(gè)頁(yè)面共享同一個(gè)連接關(guān)閉的時(shí)候要非常小心——可能是從聊天頁(yè)跳轉(zhuǎn)到登錄頁(yè)時(shí)才需要真正關(guān)閉連接而如果只是從聊天室切換到個(gè)人中心連接應(yīng)該保持不斷。針對(duì)這種情況我建議前端加一個(gè)連接狀態(tài)的全局展示頁(yè)面右上角顯示“連接中/已連接/已斷開”這樣開發(fā)和演示的時(shí)候都能直觀看到連接狀態(tài)排查問(wèn)題會(huì)方便很多。5. 性能與擴(kuò)展方向從畢設(shè)到生產(chǎn)級(jí)還差多少做完一個(gè)能用的聊天室只能算完成了一半。如果把聊天室當(dāng)作一個(gè)產(chǎn)品下面這幾個(gè)問(wèn)題是真正常見的挑戰(zhàn)也是在畢設(shè)論文的“總結(jié)與展望”里可以寫的實(shí)質(zhì)性內(nèi)容。5.1 單機(jī)瓶頸一個(gè)WebSocket服務(wù)能撐多少人先算一筆賬。一個(gè)WebSocket長(zhǎng)連接在服務(wù)器上的開銷主要來(lái)自TCP連接本身、Socket緩沖區(qū)、內(nèi)存中的會(huì)話對(duì)象。一個(gè)普通的Spring Boot應(yīng)用不做任何優(yōu)化單機(jī)撐幾千個(gè)并發(fā)WebSocket連接是比較現(xiàn)實(shí)的數(shù)字如果做了連接池調(diào)優(yōu)、會(huì)話對(duì)象精簡(jiǎn)能跑到上萬(wàn)。問(wèn)題在于聊天室的瓶頸往往不在連接數(shù)而在消息廣播的復(fù)雜度。如果房間里有一千個(gè)人一條消息要復(fù)制一千份推送給所有人網(wǎng)絡(luò)IO和CPU開銷是成倍增長(zhǎng)的。實(shí)時(shí)性要求高的場(chǎng)景下廣播邏輯的設(shè)計(jì)直接決定了系統(tǒng)上限。5.2 橫向擴(kuò)展多實(shí)例部署下怎么辦生產(chǎn)和畢設(shè)的另一個(gè)重大區(qū)別是服務(wù)器不可能永遠(yuǎn)只有一臺(tái)。當(dāng)你部署多個(gè)WebSocket實(shí)例用nginx負(fù)載均衡分流時(shí)問(wèn)題就來(lái)了用戶A連接在了實(shí)例1用戶B連接在了實(shí)例2A發(fā)的消息要讓B收到實(shí)例1怎么把消息轉(zhuǎn)發(fā)給實(shí)例2常見的方案是引入消息中間件比如Redis的Pub/Sub或者RabbitMQ。所有實(shí)例都訂閱同一個(gè)頻道實(shí)例1收到A的消息后既推送給本地連接的A也發(fā)布到Redis頻道實(shí)例2訂閱到頻道后把消息推送給本地的B。這樣消息就能跨實(shí)例轉(zhuǎn)發(fā)。這個(gè)點(diǎn)寫進(jìn)論文里是真正的亮點(diǎn)因?yàn)樗f(shuō)明你理解了一個(gè)系統(tǒng)從小到大的演進(jìn)邏輯而不只是會(huì)調(diào)API。畢設(shè)階段要實(shí)現(xiàn)多實(shí)例比較難但寫清楚方案設(shè)計(jì)和優(yōu)劣分析是完全能做到的。5.3 從畢設(shè)到產(chǎn)品的幾個(gè)擴(kuò)展方向如果做完核心功能還有余力可以在下面幾個(gè)方向里選一個(gè)深入的消息完整性保障實(shí)現(xiàn)消息確認(rèn)機(jī)制ACK??蛻舳耸盏较⒑蠡匾粋€(gè)ACK服務(wù)器沒(méi)收到ACK就重發(fā)保證消息不丟。傳輸效率優(yōu)化多條消息合并成一批發(fā)送減少網(wǎng)絡(luò)包數(shù)量或者對(duì)二進(jìn)制協(xié)議格式做自研進(jìn)一步壓縮體積。這些在WebSocket協(xié)議層都可以做。富媒體消息在文本消息的基礎(chǔ)上增加圖片、文件、語(yǔ)音消息。實(shí)現(xiàn)邏輯不復(fù)雜——先用HTTP接口上傳文件拿到URL再把URL作為消息內(nèi)容通過(guò)WebSocket發(fā)送出去。這個(gè)功能視覺(jué)效果明顯展示時(shí)很加分。多端同步用戶在手機(jī)和電腦上同時(shí)登錄消息在兩邊的狀態(tài)保持一致。這個(gè)需要引入消息同步游標(biāo)類似Cursor的概念比普通聊天室再深一層。6. 答辯準(zhǔn)備與時(shí)間規(guī)劃建議聊完技術(shù)細(xì)節(jié)最后給準(zhǔn)備做這個(gè)題目的同學(xué)一些實(shí)際經(jīng)驗(yàn)。6.1 時(shí)間安排不要最后一個(gè)月才開始我見過(guò)太多學(xué)生在畢業(yè)設(shè)計(jì)前三個(gè)月毫無(wú)動(dòng)靜最后一個(gè)月熬夜寫代碼、寫論文質(zhì)量可想而知。如果做聊天室我建議第1-2周完成需求分析、技術(shù)選型、原型設(shè)計(jì)。不要急著寫代碼先搞清楚系統(tǒng)要有哪些頁(yè)面、哪些接口、消息協(xié)議怎么定義。第3-4周完成用戶注冊(cè)登錄、數(shù)據(jù)庫(kù)設(shè)計(jì)、Vue項(xiàng)目搭建。這是地基地基不穩(wěn)后面全亂。第5-7周完成WebSocket通信、聊天室核心功能。這是攻堅(jiān)戰(zhàn)留足時(shí)間調(diào)試聯(lián)調(diào)。第8周完善細(xì)節(jié)心跳、重連、異常處理開始寫論文。第9-10周論文初稿、中期檢查、查漏補(bǔ)缺。第11-12周答辯PPT準(zhǔn)備、系統(tǒng)演示視頻錄制、壓力測(cè)試數(shù)據(jù)整理。6.2 答辯時(shí)容易翻車的幾個(gè)問(wèn)題基于我?guī)W(xué)生的經(jīng)驗(yàn)答辯老師對(duì)聊天室項(xiàng)目的高頻提問(wèn)集中在以下幾個(gè)方向提前準(zhǔn)備好答案“WebSocket和HTTP的區(qū)別是什么為什么不用HTTP輪詢”考察協(xié)議理解“WebSocket連接斷開了怎么感知怎么恢復(fù)”考察心跳和重連機(jī)制“消息是實(shí)時(shí)的那歷史消息存哪里怎么保證不丟失”考察數(shù)據(jù)持久化“如果在線用戶很多服務(wù)器怎么處理廣播風(fēng)暴”考察性能意識(shí)“你的系統(tǒng)安全嗎怎么防止別人偽造身份登錄”考察安全意識(shí)這些問(wèn)題都不難但要求你是真的動(dòng)手寫過(guò)代碼而不是只看過(guò)教程。只要每一行代碼都是自己敲的這些問(wèn)題都能答得下來(lái)。6.3 一個(gè)小技巧錄演示視頻答辯當(dāng)天現(xiàn)場(chǎng)演示翻車概率其實(shí)不低——網(wǎng)絡(luò)出問(wèn)題、瀏覽器緩存、環(huán)境沒(méi)搭好各種意外都有可能。強(qiáng)烈建議提前錄一個(gè)演示視頻放在答辯PPT后面。視頻里把主要流程走一遍注冊(cè)、登錄、加入房間、多用戶聊天、退出登錄、重連。萬(wàn)一現(xiàn)場(chǎng)演示失敗直接放視頻體面又穩(wěn)妥。這個(gè)小習(xí)慣在很多答辯現(xiàn)場(chǎng)都能救命?;仡^再看這道題目它的價(jià)值不亞于很多看起來(lái)更“高大上”的選題。聊天室麻雀雖小五臟俱全把用戶體系、實(shí)時(shí)通信、數(shù)據(jù)持久化、異常處理、性能演進(jìn)全都串起來(lái)了。做完這個(gè)項(xiàng)目你對(duì)WebSocket協(xié)議的理解、對(duì)Vue工程化的熟練度、對(duì)前后端聯(lián)調(diào)的經(jīng)驗(yàn)都會(huì)有一個(gè)質(zhì)的提升。如果條件允許盡量在基本功上多花時(shí)間——把心跳機(jī)制調(diào)穩(wěn)、把重連邏輯寫對(duì)、把消息協(xié)議設(shè)計(jì)好這些比堆功能更能體現(xiàn)一個(gè)開發(fā)者的水平。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
最新av中文字幕高清| 欧亚揄拍偷拍精品视频 | 91老熟女老女人国产老太| 国产偷拍自拍在线视频| 另类亚洲一区二区三区| 素人伊尹大香蕉免费下载视频| 欧美男人一区| 99re视频在线观看这里只有精品| 精品人妻一区二区视频| 久久久久九九九九| 国产午夜精品在线观看| 97网色| 性色av一区二区| 超碰在线人妻| 乱伦av.com| 亚洲一卡二卡在线免费| 国产 日韩 欧美一区| 亚洲综合另类色图| 高清不卡 中文 人妻| 伊人影院在线理论播放| 99热成人| 这里有精品| 一区二区三区 日韩欧美| 日韩亚洲欧美中文字幕| 精品人妻一区二区免费看| 啊啊啊不要嗯嗯在线观看| 久久精品免费| 综合网久久| 超碰久久性爱| 久久久久密臀视频| 九九九九免费高| 狠狠躁AV| 欧美色图下一页| AV一二区| 日本精品国产视频| 97超碰无码网| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 日韩国产在线观看av| 亚洲欧美日韩中文播放| 日本一区二区亚洲综合| 国产精品不卡一区二区电影| 狠狠色伊人亚洲综合网站色| 香蕉热人人精品| 激情小说日韩无码| 入口操逼网站| 国产自偷自拍一区| 九九九久千久久激情蜜桃在线看 | 亚洲欧美综合区自拍另类| 欧洲久久一二线| 久久久久久9| 91天堂| 中英熟女操女| 日本性爱欧美性爱| 亚洲色图日韩精品| 婷婷五月天av| 国产天天骚| 好吊色一区| 日本天天干天天搞一区| 亚洲少妇自拍中文字幕懂色| 99热一区二区三区四区| 91色人妻| 人人扣人人操| 亚洲欧美大| 91在线免费观看处女| 99re69综合| 91女优在线观看| 91国产伊人大香蕉| 91激情| a片在线播放| 看免费一级在线播放毛片| WWW啪啪的com| 国产成人+综合亚洲+天堂| 亚洲欧美中文日韩视频中国语| 午夜国产成人福利视频 | 久久性爱精品一区| 国产精品老师| 久久久久密臀视频| 天天网综合| 亚洲无码国产精品久久| 国产老女人久久毛| 天美av在线观看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 91久久精品美女高潮喷水| 天天摸天天操视频| 亚洲最新a在线观看| 日本 成 人 小说 电影 一区二区| 夜夜高潮夜夜爽| 亚洲国产一级黄色视频| 国产成年精品高清在线观看91| 91人妻Pr| 大胆91| 校园春色 男人天堂| 白丝AV网站| 天天综合精品| 精产国品一区二三产品| 久久精品店| 亚洲AV操| 男女性扦B| 99re在线| 秋霞欧美性爰视频| 91美女视频电影| 一级做受视频免费是看美女| 日本熟女中文| 中文字幕第7页| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 激情丁香五月| 色网亚洲人| 先锋激情∨在线视频播放| 激情五月综合网| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 欧美午夜精品久久久久久超碰| 五月天久久婷婷亚洲 | 日韩,欧美,中文在线| 久久久草成人网站久久久草成人久久久草久久久 | 欧美制服另类丝袜| 99re视频在线播放青草| 亚洲操逼无码| 91美女国产在线| 综合 欧美 亚洲 日本| 97天天爽| 97在线免费视频| 五月丁香色综合| 四虎精品亚洲| 人妻少妇久久久| 久久αⅴ| 久热69九色熟妇97| av网站在线看| 97青娱乐超碰久久| 中文人妻av高清一区| 一区二区蜜臀| 日逼视频日本| 33044男人的天堂深夜备| 日韩亚洲中文字幕在线| 女人18精品一区二区三区| 亚洲中文一区二区三区| 日本一久是| 性做久久久久久久| 啊啊啊啊,啊啊好多水| 91成人在线免费视频| 五月天亚洲网| 九九在线视频| 岛国福利在线精品播放| 搡老女人老91妇女熟女| 日韩AV熟女乱伦| 亚洲成人AB| 精品一区二区三区蜜桃臀赵总| 麻豆成人影音在线| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 麻豆av一区二区三区| 亚洲熟女乱色一区二区三区| 中文字幕在线2| 亚洲精品日韩国产欧美| 思思热久久成人| 伊人少妇久久久| 日本久久99| 日韩操啪| 无码精品啪啪啪一区二区三区三州| 蜜乳av首页| 粉嫩av在线| 粉嫩AV输入| 亚洲夜夜欢无码一区二区| 1区2区3区视频| 男女91| 八人操人人摸人人看| 欧美激情 亚洲色图| 九色 人妻 大香蕉| 日本高清一区二区在线| 在线日韩日本亚洲国产| 日本一级不卡一二区| 丁香五月天激情| 中文字幕精品免费一区二区| 色香综合天天影视综合 | 99色天堂| 97免费视频在线| 色噜噜人妻丝袜a∨先锋影 | 免费精品中文字幕| 亚洲高清色综合| baiduhicn.com。| 中文高清一区二区的| 免费?级毛片无码?∨蜜芽试看| 涩亚洲欧洲| 九九综合色| 久久精品一区二区一8| 97精品综合久久网| 97精品久久久久久久| 亚洲精品无码成人久久久99| 亚州熟女乱伦| 国产成人亚洲精品无| 欧美极品少妇| 亚州欧美综合| 韩日巨乳美女免费视频在线观看| 九九热超碰97亚洲最新香蕉| 九九九午夜| 精品亚洲国产成人AV制服丝袜| 日韩AV无码网站| 欧美激情一| 欧美日韩青操| 色男人色天堂东京热| 亚洲av夫妻操穴网| 五月丁香六月激情| 免费看日本操逼视频| 91午夜无码| 精品人妻一区二区三区四区石在线 | 亚洲A色| 亚洲色偷偷色噜噜狠狠99网| 天天拍天天操| 伊人五月天青青草婷婷| 久久99黄色卞西瓜| 久久久久久中文字幕中文字幕最新| 欧美劲爆第一页| 久久久久久久综合,国产| 欧美狠狠操| 日本三级久| 亚洲欧美大香蕉| julia高潮后不停追击中出| 日韩免费看黄片| 操逼操逼逼操操逼91 | 操逼网站地址| 天天爽人人综合免费7799| 极品极品色影院| 色色色五月婷婷| 久久xx| AA丁香综合激情| 一级黄碟在线观看| 人妻精品综合中文字幕在线 | 最新欧洲欧美日本激情网站| 激情图片伦理国产一区二区日韩| 天堂资源欧美| 91/欧美| 熟妇人妻一区二区三在线| 日本人妻天堂网站在线播放| 人人澡人人澡人人| 人人操人人肉久久精品| 色哟哟511老熟女| 五月天激情影院| 中文字幕日韩综合| av情色影音| 欧美亚洲涩涩| 人人澡人人干| 欧美日韩在线国产在线| 九九色热| 亚洲综合一区二区| 伊人久久婷婷| 午夜欧美J进J出白浆流出久久久| 免费草草草草草视频| 九九九不卡| 热99这里有精品综合久久 | 精品无码一区二区人妻久久蜜桃| 天天影视91看看| 91少妇人妻| 91看黄片| 先锋精品av色鲁| 白丝jkav| 亚洲另类春色| 天天精品| 乱老熟女一区二区三区| 久久久免费高清中文视频| 亚洲人综合19| 国产中文精品一区二区在线观看| 亚洲国产精品久久久久久久久久| 亚洲狼狼干综合1| 亚洲中文sv| 欧美1区二区三区公司| 抽插无码高清一区| 粉嫩小泬久久久一区二区| 日骚逼视频| 神马久久久久久伦理片| 区一在线观看| 97色碰| a级理论午夜日本| 青青操97| 91日韩| 新婚人妻扶着粗大强行坐下| 成人熟女视频一区二区三区| 国产色图乱伦| 中文字幕精品一区二区精品| 人妻激情在线视频| 无码精品久久久天天影视| 亚洲色图超碰在线| 久热精品在线| 91天天爱| 熟女激情综合网| 狠狠久久亚洲欧美专区| 情色图区| 久久九色| 外国免费性情大片| 日本污ww视频网站| 欧美青青草视频| 久久国产免费激情视频| 美女大乳久久久久久久女人18| 美女久久久久久久久久久| 伊人久久大香大香线蕉中文| av橘色网站| 在线中文字幕极品av| 欧美亚洲宗合色性图| 精品成人无码| 日本三级精品| 日本一久是| 极品尤物自安慰| 欧美亚洲se91| 屌逼传媒| 国内外毛片在线观看| 岛国黄| 麻豆久久久久久久久丝袜 | 国产高清吃奶免费视频网站| 四虎视频在线观看| 乱伦a片视频| 国产精品久久久久久久免牛肉蒲团| A片大香蕉在线| 熟女在线视频| 国内精品a| 亚洲乱码国产乱码精网站| 黄人人操人人操| 操逼逼中文字幕| 青青草无码视频| 俺去俺来也在线www| 亚州精品人妻一二三区| 色色色热| 巨爆乳一区二区爆乳区| 少妇蹲下买菜露大唇0| 日本道久久综合色色| 欧美综合综合| 国产白领连续中出在线观看| 国产高清在线观看欧美| 国内毛片四区| 麻豆福利视频导航| 黄色大香焦1级‘′‘| 竹菊一区二区三区AV线| 一区久久久二区| 97在线精品观看视频| 精品9999| 欧美日韩淫加| 手机看片1025| 日韩国产精品人妻无码久久久| 色香色香欲天天天影视综合网| 51国产午夜精品视频| 欧美少妇性乱| 九九热超碰| 亚洲精品久久久久毛片A片拉屎 | 亚洲天堂区| 人人操人人摸avav| 亚欧操逼片在线观看| 九九热免费视频| 无遮挡又黄又刺激的视频| 久久精品99久久久久久| 天天综合精品| 国产中文大片资源中文字幕| 欧美日韩国产色五月综合在线| 亚洲1区| 丰满人妻被猛烈进入中| 亚洲国产亚洲天堂| 九九热免费在线国产视频伊人五月| 国产Av超碰| 夜夜躁狠狠躁日日躁av| 日本最新免费韩国1区2区视频播放| 精品国产精品一区二区| 亚洲国产精品V?在线播放| 日1区2区3区2020| 色999偷自拍拍| 性做久久久久久久| 乱伦日本中文自拍| 熟女精品日韩一区二区三区| 高潮综合网| 久久极品一区二区| 五月天婷婷基地| 欧美日韩国产另类综合| 国产精品网址| 久久精品成人| 国产超碰97| 中文字幕久久精品一区| 欧美 亚洲 制服 精品| 秋霞久久亚洲精品成人| 日韩激情啪啪啪| 成·人免费午夜在线观看| 精品综合久久久久久97| 香蕉免费一区二区三区不读| 天天综合AV| 99精品视频在线观看免费| 午夜成人爽爽爽爽A片李冰冰| 人人操天天爽| 香蕉99秘 精品一区丁香| 欧亚在线视频| 黄色一区二区秘书性感| 欧美成人黄网色网站| 日韩av电影成人在线| 久久九九97| 亚洲在线A| 久久久久久久久久久久97 | 男人的天堂 在线一区| 精品人妻丰满熟妇一区二区三| 国产性爱欧美性爱在线| 夜夜嗨绯色| 久久精品72| 噜噜噜久久亚洲精品色情| 国产又黄又猛又粗又爽的网站| www.99视频| 久久精品美女一区| 久久久久九九九| 欧美大香蕉同搞| 岛国网址国产 | 久久內射| 超碰久久网| 精品少妇人妻| 久久精品无码专区| 日本506070| 97aiaiai| 国产亚洲99久久精品熟| 国产最新小视频在线播放下载| 久久 国产 无码| 四虎午夜影院| jk白丝没脱就开始啪啪| 91色婷婷综合久久中文字幕二区| 超碰成人免费| 天天干天天做| 91亚州欧美| 一区| 亚洲欧美激情小说| 日本人妻中文字幕精品| 精品日韩中文在线| 夜色AV无码手机在线影院| 国产av又色又爽又黄| 国产成人网| 女优免费一区二区永久| 久久久久久久久久久久久9999| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 乱色视频中文字幕| 色五月婷婷色| 99自拍B亚洲| 午夜精品久久999热蜜桃介男人用| 欧美亚洲清纯| av网站在线看| 欧美久久婷| 天天看综合网| 男女91| 欧洲精品在线播放| 人妻蜜桃臀| 96麻豆精品一区二区三区| 18啪啪手机免费性爱| 一区二区三区 日韩欧美| 丁香五月久久| 欧美97日韩精品| 天天日天天干少妇日| 国产精品盗摄 偷窥盗摄| 欧美亚洲| 澳门成人网站久国产日韩| 97超碰超欧美。| 成人三级片一区二区三区视频| 思思热一热婷婷热一热| 欧亚在线视频| 国产精品 午夜福利| 农村少妇久久久久久久| 在线色导航| 五月天色五月| 国产热av| 亚洲欧洲日韩天堂av| 五月丁香婷婷综合| 蜜桃午夜视频一区二区| 国产宅男宅女在线观看| 国产av青草| 91美女视频在线| 久久久9999| 国产一区二区三区影片| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 欧洲综合色| 无码视频黄色网战| 天天干人妻| 五月天精品| site:sinbotex.com| 97摸视频| 日本免费一区二区不卡 | 色哟哟1区2区| 亚欧性爱无码| 中文乱码99| 欧美后入| 日韩/97| 天天综合网网欲色| 性爱av网站| 欧美大色交| 无遮挡一级毛片视频免费的| 婷婷五月天久久精品视频一区二区三区 | 成人片视频| 日韩欧美大力操| 九九热超碰| 欧美高清色| 大香蕉AV在线| 亚洲交性| 怡红院怡春院| 天天看精品动漫视频一区| 爱射综合| 国产在线观看一区二区三区| 日韩三级在线观看mp4| 亚欧免费观看视频| 亚洲天堂另类小说男人| 韩国三级一线观看久| 中文字幕视频2区| 亚洲一二三精品久久网| 亚洲色婷婷综合久久一区二区三区| 中文字幕人妻资源在线| 蜜桃久久久久久久久久久久| 性色av蜜臀av色欲aV| 蜜桃一区二区三区| 国产福利av精彩对白| 欧美姓爱综合网| 最新欧美色网| 成人五级久久| 自拍啪啪视频| 天天91~综合入口| 国产强奸无码乱伦| 欧美日韩国产电影| 欧美国产日韩高清在线| 91精品91久久久中77777| 天天影视网综合少妇| 午夜国产乱伦视频| 941超碰| 99热超碰在线| 欧美97在线欧| 天天在线91| 人人摸人人干| 午夜无遮挡男女啪啪视频| 蜜桃网熟妇| 久久99热这里只频精品6学生| 九九九久久久| 中文字幕激情小说| 区一二区日韩亚洲乱码av电影| 秋霞久久亚洲精品成人| 蜜臀网 一区| 少妇69中文| 色情综合网| 亚洲欧洲综合av在线| 丁香7月婷婷| 欧美婷婷久久| 992这里有精品| 久久亚洲欧美中文字幕国语| 高颜值美女口爆高潮浪叫| 久久欧洲| 国产女上位好爽在线| 午夜精品五区| 亚洲第一黄色av网站| 夫妻日逼| 欧美性视频二区三区| 少妇一区二区三区在线观看| 91丨九色丨熟女高潮| 日日操免费视频| 欧美丝袜亚洲| 国内精品久9| 久久夜夜夜夜| 干B| 国产无遮挡| 国产精品老师| 囯产操逼片| 高清成年美女黄网站免费大全| 91bbb| 中文字幕一品色图| 伦理弟一页| 黄色成年| 久久av无码| 深爱伊人影院| 蜜桃臀一区二区aV| 欧美激情片一区二区| 久久伊人在线五区| 久久精品国产精品亚洲艾通辽熟妇 | 亚洲欧美中文日韩视频中国语| 国产精品麻豆免费视频| 一级一性爱免费视频| 96国产精品| 操熟女91| 欧美 亚洲精品首页| 最新岛国大片| 大香蕉欧美| 一区在线精品中文字幕| 搡老女人老91二区| 久9无限国产| 国产成人在线观看网址| 91性片| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 一区操逼| 亚洲婷婷丁香在线| 日本中文字幕不卡视频| 免费成人自拍视频在线| 亚洲天堂久久久久久粉红视频| 亚洲春色一区二区三区| 亚洲天堂在线怕怕视频| 人人干人人操人人爱| 欧 美 自 拍 偷 拍| 在线观看不卡一区二区三区| 国产色综合亚洲色综合吹潮| 无码国产精品96久久久久孕妇| 亚洲国产成人精品久久久国产成人一区二区| 天天澡天天爽日日AV| 97综合国产| 一个国产在线综合网站| 欧美极品性爱天天射| 凹凸视频在线观看伊人| 五月天婷婷成人网| 久悠悠av| 久草草一二三四区久久| 久久久久久中文| 大香久久| 国产曰批免费观看久久久| 国产乱码精品一区二区三区四川| 欧美性爱一级操| 日韩在线视频1234| 美女主播色欲91抠b在线播放| 亚洲综合九| 欧美日韩亚洲天堂| 国产又黄又爽又刺激久久久久久| 成人免费福利网站国产| 欧美少妇大量自拍视频在线观看| www.高清无码诱惑一区.com | 青青久久久| aaa亚无码专区| 温婉少妇玩3p| 红杏大香蕉| 欧美综合 站| 亚州男人天堂| 久久久夜夜嗨免费视频| 欧美最婬乱婬爆婬性视频 | h无码动漫在线观看| 999九九精品| 亚洲欧美天| 深夜福利黄片| 欧美日韩成人在线| 老女人老91妇女老热女| 高清无码人妻久久久一区二区三区aⅴ| 久久av一级av少妇av高潮| av资源在线播放天堂| 啊啊啊好湿久久| 97色操| 亚洲免费成人在线高清无码视频| 色99视频| 综合情欲网| 欧美真人抽搐一进一出gif| 伊人久久大香大香线蕉中文| 99蜜桃臀久久久欧美精品网站| 亚洲日韩美女丝袜美腿人妻视频| 中文字幕亚洲永久精品| 久久婷婷亚洲欧| 97综合网| 97五月天| 男人的天堂VA| 日韩精品亚洲专区在线影视| 大香蕉国产中文自拍| 天天草天天日| 色啪网| 精品制服美女中文一区二区三区| 无码高清国产AV| 9/A片| 亚洲欧美清纯| 色噜噜狠狠色综无码久久合欧美| 劲爆欧美人妖三区91| 99e久久国产精品| 中文字幕精品丝袜| 凹凸精品熟女在线观看| 欧美激情综合| 99无码| 五月天偷拍| avav青青草久久夜| 大香蕉乱伦视频网| 欧美色图片色哟哟| 久婷婷一区| 亚洲图片欧美色| 久久综合婷婷| 久久9精品| 奸色色 男人天堂 天天射| 巨乳特殊服务按摩| 天天干天天拍| 午夜舔阴达高潮视频免费看| 天天操天天射青青草| 91综合中文字幕| 97超碰色屌| 久久欲| 亚洲中文电影| 日韩精品在线观看网站| 男人天堂无码| 国产精品激情久久久久久久| 超碰久草| 啊啊啊啊嗯嗯嗯用力好爽 | 成人羞羞视频国产| 欧美熟妇乱码在线一区| 亚洲āv网址在线观看| 一区,二区,三区视频| 色狠狠 - 百度| 2019亚洲男人天堂| 亚洲精品视频二区| 26UUU欧美日本| 美腿丝袜高跟网免费视频免费视频| 国产精品无码久久久久2028| 俺也射| 久久婷婷热| 18禁止看精品中文字幕| 国产精品一区二区后入| 亚洲欧美大香蕉| 粉嫩av平台| 色综合超碰超| 亚洲情色五月天 | 91美女视频直播| 三级片大波波| AAAAAAAAA黄片| 天美传媒麻豆一区二区三区国产精| 天天摸天天插天天日| 久久久一区二区三区三州| 亚洲做性| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 超碰97色色| 色综合久久88色综合久久天天| 在线不欧美| 日本久久综合| 99这里都是精品| 51一区二区三区| 黄页| 制服诱惑亚洲一区二区三区在线观看| 香蕉在线一区二区三区| xxxx网站亚洲精品| 超碰在线人人射| 男人的天堂久久久| 啊啊啊啊啊啊啊好爽不要| 97色婷婷| 国产精品欧美日韩久久| 国产精品操| 久草成人影片| 在线亚洲精品久久久| 伊色综合天堂色97| 亚洲成人性爱在线观看| V A在线| 9Ⅰ超碰| 色眯眯av| a人片中文字幕一区二区| 国产欧美日韩在线观看麻豆传媒公司| 破苞ⅩXXX性无码动漫无码| 国产在线观看一区二区三区| 夜夜躁狠狠躁日日躁av| 国产精品色| 人人妻人人色| 蜜臀AV成人精品蜜臀| 婷婷五月天综合网| 日日干日日| 亚洲成人美女无吗| 国产又猛又粗又爽又黄| 亚洲国产美女久久久久| 蜜屁av| 一本一道久久综合久久| 天天天做天天天爱天天天爽| 久久綜合很很很| 欧美国产视频| 九九热免费国产视频婷婷伊人五月 | 秋霞曰韩R级| 青青操青娱乐| 日本五十路熟女一区二区| 亚洲一区日韩精品| 久久久久久97| 人人模人人看| 大JI巴好深好爽又大又粗视频| 999综合网| 亚洲欧美91| 竹菊一区二区三区AV线| 96久久久久久久| 97这里有精品| 久久人妻少妇| 91在线观看,天天综合| 久久精品一区二区三区蜜桃臀| 日本免费一区二区不卡| 97超碰中文| 欧美成人国产精品| 久久亚洲一区二区色婷婷| 一二区在线观看视频| 欧美碰碰综合色| 久草资源在线| 亚洲风情在线观看| 插入逼91| 免费啪啪av| 久久久久亚洲Aⅴ无码| 爆操无码| 国产成人五月天丁香花| 日韩丨制服丨中文|在线| 91亚洲欧美| 久久久精品九| 97视频在线观看免费高清| 亚洲国产97| 蜜臀久久99精品久久久久久-DVD原版全| 人妻第一页| 在线视频 亚洲精品| 蜜臀无码视频在线观看| 国产不卡免费在线视频| 天天干天天狼在线视频| 久久99视频| 26UUU欧美激情一区二区| 国产乱伦视频污| 九九碰九九爱97超| 美女午夜福利免费视频| 日韩av影片在线观看| 99热这里是精品| 人妻社区男人天堂| 色欲久久99精品久久| 青娱乐黄色录像| 2018天天日天天日| 欧美日韩性爱精品| 九九九九九九九九九九九免费国产| 日韩精品99久久久久久中文字幕 | 天天干,天天日| 日韩97视频!在线| 四虎免费在线播放| 美女黄网| 中日韩熟女| 中文字幕片| 中文字幕日韩人妻视频| 亚洲天堂电影精品一区| 国产白嫩精品久久| 欧美亚洲一区二区久久久婷精品大包诱| 色婷婷视频| 爱射综合| 大香蕉人妻久久| 免费福利视频中文字幕| 色婷婷网| 国产热av| 超碰免费人妻人人| 午夜天堂精品久久久久91| 亚洲情色在线| 伦理第一页| 日韩精品在线观看网站| 97高清啪啪| 日韩一级二级三级在线不卡观看完整| 天天干天天燥| oumeisetupian| 亚洲综合网91| 欧美日韩 强奸乱伦| 亚洲美女30b| 亚洲天堂男人天堂网| 99操逼| 超碰碰激情97+久| 精品欧美老熟女一二区| 天天色香欲综合网| 精品国产乱码久久久久久免费| 岛国大片在线观看网站入口| 99热免费| 国产精品内射婷婷一级二| 激情五月婷婷综合| 亚洲诱惑天堂 | 91操熟女视频| 激情接吻视频久久久久久| 成人天天看站长推荐| 久久欲| 大香蕉伊人亚洲| 超碰久超碰久| 欧美九九爱| 亚洲中亚日激情视频| 亚洲人精品午夜不卡| 国产剧情AV不卡在线观看| 一区中文字幕二区日韩| 99视频这有这里有精品| 日韩av影片在线观看| 日日日啊啊啊| 另类图片欧美激情综合| 插入综合网| 国语对白露脸XXXXXX| 91丨国产丨白浆| 青青草一区二区三区四| 国产强奸超碰AV| 智利AV在线网| 99精彩视频| 欧美色91| 97干在线看| 高清有码一区二区| 人妻免费观看| 男人a天堂手机在线版| 久久国产精品91| 麻豆国产视频精品观看| 99热aaa| 日韩三A大片在线观看| 97色妞| 18禁的网站在线| 视频黄站| 黄片免费久久久久久久| 国产精品久久久久久久久久久久久久久| 人人摸.人人色| 欧美在线第五页| 五月丁香综合啪啪| 国产一级内射高清视频| 国产久久日韩网站导航| 欧美日韩香蕉| 蜜桃久久一区| 五月激情小说| 91精品人| 少妇综合| 另类视频在线| 久久久97| 青青草视频爽一爽| 乱伦1色页| 日韩午夜国产| 丁香五月色| 9色国产精品一区粉嫩| 91视频综合在线| 色色色五月婷婷| 亚洲密乳AV| 日夜尻逼网| 9超碰免费| 亚洲欧美日韩精品久| 农村女一级毛卡片| 91五月天| 亚洲午夜免费狠狠干| 久久久一区二区三区三州| 久久人人爽av亚洲精品天堂桃色 | 丝袜综合| 91强热人妻| 欧美偷拍| 日韩毛片9| 九九久久久九九| 日韩人妻一区二区精品| 日韩视频中文字幕| 亚州色图欧美色图| 97免费免费视频网| 九九热免费国产视频婷婷伊人| 日韩欧美成人午夜福利| Julia Annxxxxx| 91成人国产综合久久精品蜜月| 国产色呦呦| 亚洲一曲日韩精品| 亚洲动态色图| 天天摸天天操视频| 久久久久久波多野吉衣高潮| 亚洲春色激情小说| 亚洲aV无码成人在线观看| 中国一级操逼视频| 激情五月天中文字幕色| 97资源站日韩| 久久综合久色欧美综合狠狠| 成人日韩中文字幕| AV 少妇 人妻 偷拍| 欧美经典一区二区三区 | 人人人人插| 三级日本一区二区三区| 欧美日韩人妻精品系列一区二区三区| 国人欧美精品一区二区| 日骚逼视频| 亚洲天在线| 国产日韩欧美| 黄色不卡视频| 日本三级小说中文字幕| 岛国1区2区3区在线观看| site:sinbotex.com| 91 丝袜在线观看| 色婷婷综合久久久久中文一区二区 | AV不卡在线| 乱性AV| 97综合网| 国产亚洲福利第一页丝袜| 三四中文字幕| 男人的天堂1024| 国产精品农村妇女精品| 婷婷人妻激情| 日韩电影免费网站麻豆视频| 加勒比久久av| 超碰日韩美妻| 中文字幕欧美日本乱码一线二线| 狠狠爱夜夜干| 中文字幕久久亚州无码| 搡老女人老91妇女熟女| 超碰久久草| 青操影院| 色偷偷综合91久久噜噜| 91美女精品| 久久爱97| 久久久久夜夜夜夜| 日本精品一区二区三区四区的功能| 日本大香蕉综合网红本杳社区| 超碰在线综合97| 欧美se综合| 熟妇色99| 欧美一级AAAAAAA| 影音先锋每日最新资源在线观看 | 久久久久幕乱码| 97国产精品久久久久| 欧美亚洲国产日本在线,久久精品国产| 伊人991| 久久超碰98| 性欧美第一页| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 欧美九九99久久精品| 2024人人操人人摸| 日韩美一区| 嗯嗯嗯不要不要免费视频| 亚洲熟久久| 91欧洲入口| 人人做,人人操,人人摸| 色天堂综合| 国产风韵犹存熟妇三区| 欧美加勒比| 在线日韩日本亚洲国产| 综合操逼| 九九热男人天堂| 日韩电影天堂视频一区二区| 中文无线日韩一区| 亚洲天堂久久久久久粉红视频| 欧美18老人禁| 久久婷综合| 久草久热| 超碰97资源网亚洲| 亚洲色婷婷综合久久久久中文| 国产女人视频三四五区| 黄片色区软件| 女优免费一区二区永久| 啊啊啊啊啊啊啊啊要喷了| 97视频播放| 国内毛片婷婷六月色| 99无码视频| 加勒比综合九九99视频在线播放| 果冻传媒A片一二三区 | 天天做日日爱夜夜爽| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 男人的天堂va| 免费福利视频中文字幕| 久久久麻豆精品| 亚洲情色第一页| 日本精品一区二区三| 免费a v| 夜夜操狠狠操| 熟女网站最新| 色欲久久久久综合网| 一本久久久精品| 麻豆国产精品午夜视频| 天天爽天天操| 久啪| 无码人妻一区二区三区色欲aⅴ| www.人人cao| 精品无码久久久久| 九九九九国产| 97干在线| 丝袜狂射91| 中国一级操逼视频| 九九毛片这里只有精品| 欧美成人精品欧美一级乱黄一区二…| 欧美十八禁视频| 射丝袜高跟鞋99| 密臀在线视频| 成人国产精品三级A片| 欧美情色男人的天堂| 亚洲开心网| 欧美拳交在线播放| 九九九久| av一区二区三区 中文| 东北女人操比视频| 国产特级毛片AAAAAA高潮流水| 精品国产乱码久久久久久影片| 99精品九九九九九九| 亚洲欧洲日韩国产自在线| 精品午夜福利| 亚洲中文字母在线播放| 五月天亚洲网| 亚洲精品日韩国产欧美| 婷婷精品久久av影视| 欧美日本国产日韩激情视频| 蜜乳av一区二区三区四区不卡| 人人干黄色| 欧美日韩国产男人| 超碰美国| 国产精品经典一卡久久久| 人人弄人人摸| 青青草视频爽一爽| 92性色国产午夜福利在线661 | 国产亚洲 中文欧美久久| 97天天| 天天干天天做| 尤物网站91| 综合激情五月丁香| 欧美丝袜91| 另类图片五月| 一区二区三区国产在线播放 | 国产亚洲精品美女久久久m| 久久视频少妇美女| 国产热RE99久久6国产精品首| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 秋霞成人一级在线观看| 9999九九九久久久| 黄片免费久久久久久久| 97超碰中文字幕| 欧美亚洲中文字幕| 中文欧丝袜诱惑| 日韩无码精品综合久久| 日本高清有码网址视频| 九九久久首页| 9丨久久九九九| 久草精品热视| 乳欲人妻办公室奶水| 噜噜瑟| 日韩另类色图| 日韩三A大片在线观看| 欧美亚洲涩涩| 午夜免费视频1000| 三级激情网站| 91美女视频电影| 人妻精品一区一区三区蜜桃91| yaouchengrenav| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 美女91av| 国产精品青草综合久久| 亚洲麻豆av一区二区| 国产人伦精品一区二区三区| 亚洲成?V人片在线观看福利| 一二三区精品视频| 嗯嗯啊啊亚欧精品| 新版天堂中文资源8在线| 精品久久久久久中文字幕视频免费| 蜜桃视频一区二区三区在线观看| 色噜噜人妻丝袜a∨先锋影 | 五月开心久久AV官网| 九九色图| 久久一区二区高清免费| 精品日日人妻| 人妻超碰青青草98| 天堂日本亚洲欧美| 大香蕉强奸乱伦| 国产日韩精品suv| 风月影院男女十八禁| 欧美性,色九九| 激情五月天丁香社区| 欧美一区二区三区四区综合| 天美传媒婬乱在| 中文字幕综合人妻| 啊嗯好大视频在线观看| 色噜噜人妻丝袜a∨先锋影| 国产精品盗摄 偷窥盗摄| 春色综合网| 91 综合 色| 97日视频| 亚洲AV乱码专区国产噜噜亚洲| 成视频在线观看免费看| 亚洲码在线中文在线观看| 男人的天堂免费| 狠久久| 日欧毛片久久| 超碰97男人| www鬼畜国产男人的天堂| 欧美日韩操逼动图| 草莓精品视频在线免费观看| 伊人九九九| 性欧美999| 97伦综合| 97超碰精品成| 婷婷五月天无码| 婷婷丁香一区二区三区| 国产亚卅97| 99re6久热只有精品6在线直播| 91大学精品激情戏| 99在线精品观看99| 午夜福利免费福利视频| 免费精品中文字幕| 日韩一级性爱无码| 国产精品一区二区a| 人人操,人人液| 国产白丝AV| 2017亚洲天堂| WWW美腿丝袜香蕉中文| 麻豆黄站| 偷拍欧美亚洲| 日产成人久久| 亚洲交换| 日本熟妇人妻一区二区三区| 黑人粗大V S日韩女优视频| 女上位精品在线| 啊啊啊啊啊啊啊啊要喷了| 最新9久久久9免费视频|