亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

WebSocket后端實戰(zhàn):從協(xié)議原理到線上排障的完整指南

WebSocket后端實戰(zhàn):從協(xié)議原理到線上排障的完整指南 聊到后端實時通信WebSocket 是繞不開的一個坎。很多后端同學(xué)對它的認(rèn)知停留在“用來做聊天室”“比輪詢好用”這種層面但真到了線上連接閃斷、消息丟失、集群廣播失效、鑒權(quán)怎么做、nginx 要不要配 Upgrade 頭這些問題一個接一個冒出來才會發(fā)現(xiàn)自己對它的理解其實很淺。這篇筆記不是把官方文檔抄一遍而是把我從協(xié)議細(xì)節(jié)到代碼落地、再到線上排障的完整經(jīng)驗梳理出來適合正在學(xué)后端、準(zhǔn)備面試、或者已經(jīng)在項目里被 WebSocket 折磨過的朋友。1. 為什么后端要單獨研究 WebSocket1.1 HTTP 的請求-響應(yīng)模型在實時場景下的尷尬HTTP 協(xié)議是典型的“一問一答”模式客戶端發(fā)請求服務(wù)端給響應(yīng)一次請求對應(yīng)一次響應(yīng)連接用完就斷。這種模型在普通的 CRUD 接口里沒有任何問題但放到實時性要求高的場景里就非常別扭。舉個最常見的例子網(wǎng)頁上的未讀消息提醒。如果只用 HTTP前端只能靠輪詢Polling來解決——每隔幾秒發(fā)一個請求問后端“有沒有新消息”。時間間隔短了服務(wù)端壓力巨大明明沒有新消息也要硬扛一堆無效請求時間間隔長了消息延遲高用戶那邊體驗很差。我在早期項目里就做過 3 秒輪詢的推送方案一個 500 人在線的后臺系統(tǒng)光輪詢請求就能把 Tomcat 的線程池打到快滿而真正有意義的業(yè)務(wù)請求反而被擠掉了。SSEServer-Sent Events能解決一部分問題它允許服務(wù)端單向推送數(shù)據(jù)給客戶端基于 HTTP 協(xié)議實現(xiàn)不需要額外協(xié)議。但 SSE 是單向的客戶端沒法通過同一條連接向服務(wù)端持續(xù)發(fā)送數(shù)據(jù)而且瀏覽器對 HTTP/1.1 下 SSE 連接數(shù)也有限制。如果業(yè)務(wù)需要客戶端和服務(wù)端頻繁雙向交互比如實時協(xié)作編輯、股票行情雙向訂閱、在線客服SSE 的局限性就暴露了。1.2 WebSocket 到底改了什么WebSocket 本質(zhì)上是在 TCP 之上建立了一條全雙工的持久通道。握手階段借用 HTTP 的 101 Switching Protocols 完成協(xié)議升級之后雙方就在同一條 TCP 連接上雙向收發(fā)數(shù)據(jù)不再有請求-響應(yīng)的一一對應(yīng)關(guān)系。這意味著三件事第一實時性從“秒級延遲”降低到“消息一到立刻推送”不需要客戶端反復(fù)輪詢。第二連接復(fù)用服務(wù)端可以主動向客戶端推送數(shù)據(jù)服務(wù)器資源消耗大幅下降。第三協(xié)議本身的數(shù)據(jù)幀開銷很小一個文本幀的控制頭只有幾十比特相比 HTTP 每次請求都要帶一堆 Header省了太多帶寬。對后端工程師來說WebSocket 不是一個“庫”或者“框架”層面的東西而是一個需要從協(xié)議層理解的通信機制。因為線上問題往往不在業(yè)務(wù)代碼里而在于連接管理、心跳保活、代理層透傳、集群消息路由這些基礎(chǔ)設(shè)施層面的細(xì)節(jié)。把這些搞明白了你寫出來的推送服務(wù)才是真正能上線的而不是 demo 級別。2. 協(xié)議級的關(guān)鍵點后端必須吃透2.1 握手不是魔法從 HTTP Upgrade 說起很多人第一次接觸 WebSocket 都會困惑為什么瀏覽器的 WebSocket API 直接填一個ws://地址就能連上感覺跟 HTTP 沒關(guān)系。實際上WebSocket 連接的第一步就是一次普通的 HTTP 請求只是帶上了特殊的 Upgrade 頭。我抓包看過一次完整的握手過程客戶端發(fā)出去的請求長這樣GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 Origin: http://example.com服務(wù)端返回HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbKxOo這里的Sec-WebSocket-Key是客戶端生成的一個隨機 Base64 字符串服務(wù)端拿到后拼上一個固定的 GUID258EAFA5-E914-47DA-95CA-C5AB0DC85B11做 SHA-1 哈希再 Base64 編碼得到Sec-WebSocket-Accept返回給客戶端??蛻舳藭r炦@個值確認(rèn)服務(wù)端真的懂 WebSocket 協(xié)議。這個機制不是擺樣子它的目的是防止一些緩存代理服務(wù)器誤把 WebSocket 請求當(dāng)成普通 HTTP 請求緩存下來導(dǎo)致連接異常。后端開發(fā)如果自己實現(xiàn)協(xié)議解析這段邏輯必須完全按規(guī)范來不能偷懶。2.2 數(shù)據(jù)幀格式和掩碼規(guī)則握手完成后數(shù)據(jù)就開始以幀F(xiàn)rame的形式在連接上傳輸了。WebSocket 的幀格式要比 HTTP 報文簡單得多但有一個容易踩坑的細(xì)節(jié)——掩碼。數(shù)據(jù)幀的關(guān)鍵字段分布如下FIN1 bit標(biāo)記這是不是消息的最后一幀。消息可以分多個幀發(fā)送最后一片幀上 FIN 才置 1。opcode4 bits表示幀類型。0x1文本幀0x2二進(jìn)制幀0x8關(guān)閉幀0x9Ping0xAPong。MASK1 bit掩碼標(biāo)志位。Payload length7 bits 或擴展表示數(shù)據(jù)長度小數(shù)據(jù)用 7 位不夠就擴展到 716 位或 764 位。Masking-key4 bytes僅在 MASK 為 1 時存在。Payload data實際業(yè)務(wù)數(shù)據(jù)。協(xié)議里有一個硬性規(guī)定客戶端發(fā)送給服務(wù)端的幀必須帶掩碼MASK1服務(wù)端發(fā)送給客戶端的幀必須不帶掩碼MASK0。這個設(shè)計的初衷是防止早期瀏覽器被惡意腳本用 WebSocket 連接攻擊內(nèi)網(wǎng)服務(wù)。服務(wù)端在實現(xiàn)時如果收到客戶端未掩碼的幀應(yīng)該按協(xié)議錯誤處理。對于后端開發(fā)來說如果是用成熟的 WebSocket 庫比如 Spring 的 WebSocket 模塊、Netty、Node.js 的 ws 庫掩碼處理已經(jīng)被底層封裝好了不手寫解析的話通常碰不到。但一旦用原生 Socket 或者做網(wǎng)關(guān)轉(zhuǎn)發(fā)就必須自己處理這一步。2.3 幀類型文本、二進(jìn)制、Ping/Pong 與關(guān)閉幀實際開發(fā)里業(yè)務(wù)數(shù)據(jù)主要用文本幀或二進(jìn)制幀。文本幀要求數(shù)據(jù)必須是合法的 UTF-8發(fā)二進(jìn)制數(shù)據(jù)比如圖片上傳、文件流就要用二進(jìn)制幀。選擇哪種取決于業(yè)務(wù)場景聊天消息用文本幀就夠了要傳序列化對象或者文件分片就用二進(jìn)制幀省掉 Base64 編碼帶來的 33% 體積膨脹。Ping 和 Pong 幀的作用是保活。WebSocket 連接底層是 TCPTCP 本身雖然有心跳機制但默認(rèn)關(guān)閉且探測周期很長。如果客戶端和服務(wù)端之間長時間沒有數(shù)據(jù)傳輸中間經(jīng)過的 NAT 網(wǎng)關(guān)、負(fù)載均衡、防火墻設(shè)備可能會把空閑連接回收掉連接就悄悄斷了而雙方都不知道。這時候就需要應(yīng)用層心跳一端發(fā) Ping 幀另一端收到后必須回 Pong 幀。很多庫也支持直接發(fā) Pong 幀作為對 Ping 的響應(yīng)。如果發(fā)了 Ping 之后在超時時間內(nèi)沒收到 Pong就可以判定連接已經(jīng)死了主動關(guān)閉然后觸發(fā)重連邏輯。關(guān)閉幀則用于正常關(guān)閉連接。關(guān)閉時可以帶一個狀態(tài)碼和原因說明。常見狀態(tài)碼比如 1000 表示正常關(guān)閉1001 表示服務(wù)端即將關(guān)停比如應(yīng)用重啟1008 表示策略違規(guī)比如鑒權(quán)失敗。提示如果服務(wù)端在收到關(guān)閉幀之后繼續(xù)往這條連接上寫數(shù)據(jù)很可能會觸發(fā)異常。正確的流程是收到關(guān)閉幀 - 回復(fù)關(guān)閉幀 - 雙方關(guān)閉 TCP 連接 - 釋放相關(guān)資源。3. 服務(wù)端實現(xiàn)與代碼落地3.1 在 Spring Boot 里寫一個 WebSocket 服務(wù)端我平時主要用 Java 技術(shù)棧Spring Boot 項目里集成 WebSocket 非常順手。Spring 提供了兩套方式一套是基于ServerEndpoint的 Java WebSocket 標(biāo)準(zhǔn)JSR-356實現(xiàn)另一套是 Spring 自家的WebSocketHandlerWebSocketConfigurer。兩者對比下來我的習(xí)慣是用ServerEndpoint做業(yè)務(wù)接入因為它在處理連接生命周期、消息接收、異常處理時的代碼更直觀配合ConcurrentHashMap管理會話非常清晰。先加依賴dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-websocket/artifactId /dependency然后有一個配置類注入ServerEndpointExporterConfiguration public class WebSocketConfig { Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }接下來是具體的 Endpoint 類我用一個通知推送服務(wù)來做示例Component ServerEndpoint(/notice/{userId}) Slf4j public class NoticeWebSocketServer { // 會話集合key 是用戶標(biāo)識value 是 Spring 封裝的 Session private static final MapString, Session SESSION_MAP new ConcurrentHashMap(); OnOpen public void onOpen(Session session, PathParam(userId) String userId) { SESSION_MAP.put(userId, session); log.info(用戶 {} 建立連接當(dāng)前在線數(shù){}, userId, SESSION_MAP.size()); } OnClose public void onClose(PathParam(userId) String userId) { SESSION_MAP.remove(userId); log.info(用戶 {} 斷開連接當(dāng)前在線數(shù){}, userId, SESSION_MAP.size()); } OnMessage public void onMessage(String message, Session session) { // 根據(jù)業(yè)務(wù)處理客戶端發(fā)來的消息比如回復(fù)確認(rèn)、上行指令 log.info(收到來自客戶端消息{}, message); } OnError public void onError(Session session, Throwable error) { log.error(連接異常: , error); } public static void sendToUser(String userId, String message) { Session session SESSION_MAP.get(userId); if (session ! null session.isOpen()) { try { session.getBasicRemote().sendText(message); } catch (IOException e) { log.error(推送消息失敗userId: {}, userId, e); } } } }注意SESSION_MAP要支持多線程并發(fā)訪問所以用ConcurrentHashMap。因為 WebSocket 的onOpen、onMessage、onClose是在不同線程里被調(diào)用的普通的HashMap在高并發(fā)下擴容時可能出現(xiàn)死循環(huán)或者數(shù)據(jù)錯亂。3.2 把連接對象管起來會話管理Session對象就是服務(wù)端和某個客戶端之間的一條持久通道。管理好這些 Session是 WebSocket 后端最核心的日常操作。會話管理的核心要點有三個第一選擇合適的 Key。上面示例用的是userId適用于一個用戶同時只維持一個連接的場景。如果是同一個用戶在多端登錄手機、瀏覽器、桌面應(yīng)用一個userId對應(yīng)多個 Session就要用userId 端類型做 Key或者改成userId - SetSession的結(jié)構(gòu)推送時遍歷這個集合。第二及時清理失效連接??蛻舳酥苯訑嗑W(wǎng)、斷電是不會有正常關(guān)閉幀發(fā)過來的服務(wù)端的onClose不一定被觸發(fā)。如果不做心跳檢測SESSION_MAP里會堆積大量僵尸 Session內(nèi)存和文件描述符都會泄漏。第三推送時要檢查session.isOpen()。連接可能已經(jīng)關(guān)閉了但對象還在 Map 里直接sendText會拋IllegalStateException。先判空再檢查 isOpen這是最基本的防御。3.3 服務(wù)端主動推送消息的正確姿勢很多項目會通過業(yè)務(wù)線程主動推送比如訂單支付成功給用戶發(fā)一個站內(nèi)信通知、告警系統(tǒng)推送異常信息。這里有一個很容易犯的錯誤直接在業(yè)務(wù)線程里調(diào)用session.getBasicRemote().sendText()。getBasicRemote()是同步發(fā)送如果網(wǎng)絡(luò)慢或者客戶端處理慢會阻塞當(dāng)前業(yè)務(wù)線程。在秒殺、告警這種高并發(fā)推送場景這個操作會直接影響業(yè)務(wù)接口的響應(yīng)時間。我一般用getAsyncRemote()改異步發(fā)送或者干脆封裝一層推送服務(wù)把“發(fā)送消息”和“業(yè)務(wù)處理”解耦。另外一個實戰(zhàn)技巧是不要用單條 session 的鎖來同步批量推送。最典型的問題出現(xiàn)在群發(fā)場景——如果按用戶維度加鎖一個用戶的連接卡頓會導(dǎo)致整個循環(huán)推送阻塞。我在上一個項目里就是把“往單個客戶端發(fā)消息”和“遍歷所有用戶群發(fā)”拆成兩個方法單用戶發(fā)送失敗直接捕獲異常跳過絕對不讓一個壞連接拖垮整個群發(fā)。4. 線上一定會遇到的四個問題4.1 連接不穩(wěn)定心跳與重連機制WebSocket 連接在公網(wǎng)環(huán)境下很難保持長期穩(wěn)定。運營商 NAT 映射有超時時間公司防火墻會回收閑置連接服務(wù)端應(yīng)用重啟也會斷掉所有連接。設(shè)計一個健壯的 WebSocket 服務(wù)心跳和重連是標(biāo)配。心跳機制通常是這樣設(shè)計的服務(wù)端維護(hù)一個定時任務(wù)每隔一段時間比如 30 秒主動向客戶端發(fā) Ping 幀同時記錄每個 Session 最近一次收到消息的時間。如果連續(xù) N 次 Ping 都沒有響應(yīng)就把這個 Session 標(biāo)記為超時并關(guān)閉。還有一種常見做法是客戶端主動心跳由前端每隔一段時間發(fā)一個業(yè)務(wù)心跳包服務(wù)端收到后重置空閑計時。這兩種方案可以組合服務(wù)端 Ping 客戶端業(yè)務(wù)心跳雙保險。無論哪種方案關(guān)鍵點是服務(wù)端必須兜底清理超時連接不能依賴客戶端主動斷。我在第一次做的時候就把這件事想簡單了只做了服務(wù)端 Ping沒做超時清理。結(jié)果線上運行三天后堆內(nèi)存里躺著幾萬個已經(jīng)不存在的 Session 對象連接數(shù)飆升到服務(wù)端文件描述符上限整個應(yīng)用直接拒連接。從那以后我所有的 WebSocket 服務(wù)都強制加超時清理邏輯。前端那邊的重連也很有講究。最簡單的方案是斷線后固定延遲重連但服務(wù)端發(fā)布重啟時成百上千的客戶端會同時發(fā)起重連造成“驚群效應(yīng)”——服務(wù)端剛啟動就被一輪重連請求打掛。我建議前端做指數(shù)退避重連從 1 秒開始每次失敗翻倍最長不超過 30 秒并且加上隨機抖動jitter避免客戶端的重連請求在同一時刻爆發(fā)。4.2 鑒權(quán)怎么做token 帶在哪WebSocket 握手走的是 HTTP所以鑒權(quán)理論上可以在握手階段完成。但 WebSocket API 在瀏覽器里有一個限制無法自定義 Header。new WebSocket(url)只能設(shè)置 URL 和協(xié)議列表不能像fetch那樣手動帶Authorization頭。因此常用方案有三種方案一token 放進(jìn) URL Query 參數(shù)。比如ws://localhost:8080/notice/1001?tokenabc123。實現(xiàn)簡單但 token 會出現(xiàn)在日志、瀏覽器歷史、反向代理的 access log 里有泄露風(fēng)險務(wù)必做好日志脫敏。方案二token 放到子協(xié)議Subprotocol里。在握手時用Sec-WebSocket-Protocol字段攜帶 token服務(wù)端從 header 里取出來校驗。這種方式相對隱蔽但協(xié)議本意是標(biāo)記應(yīng)用層協(xié)議拿它傳 token 屬于“擦邊球”需要團(tuán)隊統(tǒng)一約定。方案三先通過 HTTP 接口換取一次性票據(jù)再在握手時通過 Query 參數(shù)提交服務(wù)端校驗通過后立即失效。適合對安全要求高的場景。我個人最常用的組合是token 放 Query 參數(shù) 服務(wù)端攔截器校驗 對日志做脫敏處理。校驗放在握手階段有一個巨大的好處——失敗的連接根本不會被OnOpen接收避免非法連接占用資源。4.3 多實例部署消息怎么廣播WebSocket 的連接是有狀態(tài)的Session 綁定在某個實例上。一旦服務(wù)做水平擴容部署了多個實例用戶 A 連接在實例 1用戶 B 連接在實例 2A 要給 B 發(fā)消息直接遍歷本地 SESSION_MAP 根本找不到 B。解決思路不是讓每個實例共享 Session而是引入一個消息路由層。最經(jīng)典的做法是基于 Redis 的發(fā)布訂閱Pub/Sub實例 1 收到 A 的消息后把消息發(fā)到 Redis 的指定 Channel所有訂閱了這個 Channel 的實例都能收到再由持有目標(biāo) Session 的實例完成推送。核心邏輯大致如下// 推送入口 public void pushMessage(String targetUserId, String message) { // 1. 先查本地 Session 是否存在 if (SESSION_MAP.containsKey(targetUserId)) { sendToLocalUser(targetUserId, message); return; } // 2. 本地不存在通過 Redis Pub/Sub 廣播出去 redisTemplate.convertAndSend(ws:notice, targetUserId : message); } // Redis 消息監(jiān)聽器里接收并處理 public void onMessage(String payload) { String[] parts payload.split(:, 2); String targetUserId parts[0]; String message parts[1]; // 消息可能是發(fā)給本實例的也可能是發(fā)給其他實例的統(tǒng)一走本地發(fā)送邏輯 if (SESSION_MAP.containsKey(targetUserId)) { sendToLocalUser(targetUserId, message); } }這樣每個實例只需要維護(hù)自己的本地 SESSION_MAP跨實例的消息通過 Redis 中轉(zhuǎn)。要注意的是Redis Pub/Sub 的消息是即發(fā)即棄的如果某個實例當(dāng)時不在線消息就丟了。對推送可靠性要求更高的場景可以考慮用 Redis Stream、RocketMQ 這類帶持久化的消息隊列從“訂閱推送”演進(jìn)為“先存儲后投遞”。還有一種方案是引入專門的網(wǎng)關(guān)層所有 WebSocket 連接都掛在網(wǎng)關(guān)層業(yè)務(wù)后端不直接持有連接網(wǎng)關(guān)負(fù)責(zé)把消息路由到目標(biāo)客戶端。這種架構(gòu)更徹底但實現(xiàn)成本也更高適合體量更大、微服務(wù)劃分更細(xì)的團(tuán)隊。4.4 網(wǎng)關(guān)/代理層nginx 配置與連接超時WebSocket 服務(wù)前面幾乎都會加一層 nginx 做負(fù)載均衡和域名轉(zhuǎn)發(fā)。nginx 默認(rèn)配置對 WebSocket 并不友好因為它需要支持 HTTP 升級。在我的服務(wù)器上一個可用的 location 配置是這樣的map $http_upgrade $connection_upgrade { default upgrade; close; } upstream ws_backend { server 127.0.0.1:8080; server 127.0.0.1:8081; # 開啟長連接復(fù)用避免每次握手都新建后端連接 keepalive 32; } server { listen 80; server_name ws.example.com; location /notice { proxy_pass http://ws_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 關(guān)鍵如果 60 秒內(nèi)沒有數(shù)據(jù)交互nginx 會主動斷開連接 proxy_read_timeout 3600s; proxy_send_timeout 3600s; } }上面配置里有幾個坑都是我實際踩過的proxy_set_header Connection $connection_upgrade是必須的如果寫成固定的upgrade普通 HTTP 請求也會被當(dāng)作升級請求處理導(dǎo)致靜態(tài)資源接口異常。用map做動態(tài)映射是最穩(wěn)妥的方式。proxy_read_timeout默認(rèn)是 60 秒如果不調(diào)大當(dāng)客戶端和服務(wù)端之間剛好沒有數(shù)據(jù)交換超過 60 秒nginx 就會先斷開連接??蛻舳撕蛻?yīng)用層心跳的數(shù)據(jù)能覆蓋這個超時時間但保險起見我會把超時時間設(shè)置為心跳間隔的好幾倍。另外負(fù)載均衡算法默認(rèn)是輪詢但 WebSocket 連接一旦建立后續(xù)幀都走同一條 TCP 連接所以 nginx 層不需要做會話保持sticky session只要保證握手中的 Upgrade 請求被轉(zhuǎn)發(fā)到正確后端即可之后的流量都跟著連接走。5. 常見問題與排查技巧實錄5.1 連接一打開就斷瀏覽器報 10061006 是 WebSocket 里最讓人頭疼的錯誤碼因為它是“連接非正常關(guān)閉”的統(tǒng)稱瀏覽器不會給任何具體原因。服務(wù)端日志和瀏覽器 Network 面板往往都沒有有效信息。我遇到這個問題的排查順序一般是這樣的第一步確認(rèn)握手是否成功。在瀏覽器 Network 面板看 WebSocket 那條請求的 Status Code 是不是 101。如果不是 101說明代理層或后端沒有正確返回升級響應(yīng)大概率是 nginx 配置少了 Upgrade 頭。第二步確認(rèn)服務(wù)端有沒有在握手之后立刻關(guān)閉連接。常見原因是鑒權(quán)失敗、Session 為空返回了異常。在OnOpen里處理完邏輯后打一條日志確認(rèn)連接是否真的注冊成功。第三步排查是不是代理層提前斷開了。如果前面有 nginx 或者云負(fù)載均衡先跳過它直連后端測試。直連沒問題就把焦點放到代理層配置上。第四步看服務(wù)端進(jìn)程是不是有 GC 停頓或者線程阻塞。Full GC 如果造成長時間 Stop The World也會觸發(fā)底層 TCP 超時表現(xiàn)出來就是 1006。5.2 服務(wù)端消息推送不出去代碼里明明調(diào)用了sendText沒有拋異常但客戶端就是收不到。這種“靜默失敗”比報錯更煩人。根據(jù)我的經(jīng)驗先查session.isOpen()。如果連接已經(jīng)斷了但狀態(tài)沒來得及更新發(fā)送接口可能不報錯消息卻發(fā)不出去。其次是檢查是否用了同一個BasicRemote實例在多個線程里同時發(fā)送。WebSocket 協(xié)議要求同一個連接的數(shù)據(jù)幀必須串行發(fā)送多個線程同時寫會導(dǎo)致數(shù)據(jù)幀交錯發(fā)送接口會拋異?;蛘呦⒈粊G棄。正確的做法是把發(fā)送操作統(tǒng)一收口到一個方法里加鎖保證同一時刻只有一個線程在寫。在 Netty 或者 Spring 底層同一條連接本身是不允許并發(fā)寫的框架會在高并發(fā)下觸發(fā)異常。5.3 連接數(shù)持續(xù)增長內(nèi)存和句柄被吃光這個問題幾乎每個做 WebSocket 的人都會遇到?,F(xiàn)象是線上連接數(shù)一直漲不下降最后服務(wù)端報 “Too many open files” 或者堆內(nèi)存耗盡。原因大多是兩類。一類是客戶端異常斷開拔網(wǎng)線、App 閃退沒有發(fā)關(guān)閉幀服務(wù)端的onClose沒有被調(diào)用Session 一直留在 Map 里。另一類是服務(wù)端業(yè)務(wù)代碼持有 Session 引用即使底層連接已經(jīng)關(guān)閉對象仍然無法被 GC。方案只有一個也是最有效的一個定時清理。寫一個定時任務(wù)每隔一段時間遍歷SESSION_MAP檢查每個 Session 的最后活動時間。如果超過設(shè)定閾值比如 90 秒沒有收到任何幀就主動調(diào)用session.close()并從 Map 中移除。需要注意的是清理任務(wù)本身就是對宿主機資源的消耗幾千個連接還好幾萬個連接的時候ConcurrentHashMap的遍歷也會帶來線程競爭。我現(xiàn)在的做法是把 Session 按時間分桶存放清理時只掃最近超時的桶而不是全量掃描。5.4 谷歌瀏覽器高版本無法啟用 WebSocket有不少人遇到這類問題高版本瀏覽器里 WebSocket 連接始終建立不起來控制臺報錯信息又很模糊。首先要澄清一點現(xiàn)代主流瀏覽器對 WebSocket 的支持是非常成熟的不需要“啟用”什么開關(guān)。所謂“無法啟用”絕大多數(shù)情況下是頁面代碼把ws://和wss://寫錯了。如果頁面是 HTTPS 環(huán)境瀏覽器會強制要求 WebSocket 使用 TLS 加密也就是wss://協(xié)議。如果用ws://瀏覽器會直接拒絕連接報錯內(nèi)容可能只是WebSocket connection failed。開發(fā)環(huán)境用 HTTP 就配ws://生產(chǎn)環(huán)境只要上了 HTTPS就必須對應(yīng)改成wss://并且 nginx 層要配置 SSL 證書和代理。另外瀏覽器對 WebSocket 連接數(shù)也有限制。HTTP/1.1 下單個域名最多 6 條并發(fā)連接如果頁面里同時開了多個 WebSocket超出的連接會排隊甚至失敗。高版本瀏覽器在 HTTP/2 下的連接限制略有放寬但多路復(fù)用對 WebSocket 的支持并不完美仍然建議控制同頁面的連接數(shù)量。5.5 常見問題速查表現(xiàn)象常見原因處理優(yōu)先級連接一直無法建立協(xié)議前綴錯誤、nginx 沒配 Upgrade、端口不通先查 nginx 配置和瀏覽器 Network連接建立后秒斷報 1006鑒權(quán)失敗、代理層超時、后端異常關(guān)閉服務(wù)端日志 直連測試客戶端收不到推送Session 已失效、多線程并發(fā)寫、代理層緩沖檢查 isOpen、統(tǒng)一收口發(fā)送連接數(shù)只增不減沒有心跳清理、onClose 未觸發(fā)增加定時清理任務(wù)后端多實例時消息不互通缺少消息路由層引入 Redis Pub/Sub 或消息隊列服務(wù)端 CPU 飆升心跳頻繁、全量掃描 Session、同步阻塞發(fā)送優(yōu)化心跳策略、異步發(fā)送把這些場景都過一遍之后再回頭看 WebSocket會發(fā)現(xiàn)它其實就是一個“長連接 幀協(xié)議 連接管理”的組合體。協(xié)議本身不復(fù)雜復(fù)雜的是把它放進(jìn)真實系統(tǒng)里的各種約束。我在最初學(xué)習(xí)的時候總想著把協(xié)議背熟、代碼寫好就萬事大吉后來發(fā)現(xiàn)真正拉開差距的是連接斷沒斷、消息丟沒丟、服務(wù)掛沒掛這幾個在生產(chǎn)環(huán)境逃不掉的工程問題。現(xiàn)在手邊每一個 WebSocket 項目我上手第一件事就是先問清楚心跳怎么做、斷線重連怎么設(shè)計、集群節(jié)點掛了消息怎么兜底這比磨任何框架 API 都重要。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美超碰97| 婷婷五月天激情网| 美女t无毒不卡不卡| 天天天天干| 欧美精品三级黄片| 九九视品黄色| 久久久久久久少妇| 精品久久久久久亚洲| 国产主播福利| 97视频在线看| 碰人碰碰人人开房人肉| 好屌色综合| A久久| 中文字幕高清精品一区| 久久国产乱子伦精品免费女,网站| 91在线色| 欧美日韩丝袜| 五月婷婷丁香六月| 嫩草影院性色| 波多野结衣AV无码一区| 久久中文字幕在线观看| 久久草视频污视频| 熟女中出视频| 综合 青草 伊久久 影院 综合| 日韩精品黄片免费观看| 九九碰九九爱97| 国产三级片在线观看| 欧美综合777| 丝袜性亚洲| 日本日皮视频逼| 牛牛操视频逼| 午夜毛片亚洲精品片国产久久久| 中文字幕一区二区三区人妻不卡| 91色综合色| 人妻社区男人天堂| 日韩中文字幕av在线播放| 爽爽歪在线视频| 久久久久婷婷| 天天澡天天爽日日AV| 色九月| 久草视频分类在线| 97天堂| 丝袜熟女2P| 亚洲网站一区二区在线| 久久色一区二区| 久久69| 中美日韩毛片| av日韩手机在线影视| 亚洲欧美91√| 亚洲 日韩 欧美 国产综合体| 干少妇视频| 校园春色 男人天堂| 国产精品高潮久久久无码| 欧美一区二区在线资源| 色综合尤物| 精品人妻丰满熟妇一区二区三| 午夜免费视频1000| 欧美性爽xyxOOOO| 欧美久久婷| 日韩欧美国产一区二区三区四区| 性色aV一区二区三区噜噜| 日韩伦理久 久久 清纯| 2019久久久久久久久福利| 极品AV网站在线观看| 人人色人人操在线| 夜夜精品视频| 欧美性五月| www鬼畜国产男人的天堂| 日本黄色精品专区网站| 自拍第一页| 97亚洲综合电影| 无码WWW免费视频网站| 国产伊人精品在线| WWW.加勒比人妻一区不卡.com| AV免费在线播放一区| 欧美写真视频一区| 九九九九热只有精品| 淫淫总合网| 国产一区二区三区免费视频在性观看 | 国内成人圈中文字幕无码视频| 日日干日日| 樱花蜜乳av| 麻豆 美女 丝袜 人妻 中文| 久久精品视| A片 AV一级在线播放观看免费| 欧美成人性活片| 国产久久一区二区| 久久久久密臀一区二区| 日韩三四五区| 亚洲综合色婷婷| 人妻一区二区三区视频| 亚洲图片激情综合另类| 日韩欧美日韩| …亚洲黄色厕厕女女在线播…| 97视频620| 婷婷五月花| 人妻在线视频| 久久精品国产亚洲AV高级北京| 国产精品成人AV片免费看网站| 欧美色爱综合| 在线色资源| 欧美中文狠| 久久久999日本大片| 欧美一级做a爰片免费视频| 成人免费毛片| 黄色免费网| 性色A∨91| nuu12国产麻豆精品| 国产美女口爆吞精| 欧美亚洲国产日本在线,久久精品国产| 校园春色 男人天堂 | 噜噜噜亚洲精| 青青草成人视频在线观看二区| 大鸡吧尹人在线| 亚洲欧洲小说图片视频| 亚洲激情综合| 久久视网78| 东北夫妻性偷拍| 亚洲欧美在线观看2021 | 懂色av中文字幕| 欧美变态激情网| 国产精品久久9| 亚洲91少妇| 啊啊啊用力在线观看| 亚洲.欧美.丝袜.中文.综合| 欧美72网页| 97天天综合网| 精品九九九九九九九九九| 东京热精品97综合网| 国产乱码精品久久久久久| 色老汉色| 亚洲污污网站| 色色九区| 三级日本一区二区三区| 亚洲无线码欧洲精品区别| 国产绿奴视频在线观看| 人妻 中文 日韩| 欧美日韩操操操| 亚欧Av| 九九黄色网| 长长久久88视频| 啊啊啊好湿久久| 久久精品老司| 国产一区二区在线看| 日韩三级av片| 青青青国产手线观看视频2| 高清有码一区二区| 日本视频一区二区三区| 日亚韩精品视频二区三| 亚洲AV无码乱码在线观看性色| 婷婷久久综合| 操B久久| 亚洲日韩少妇一道本视频| 97草草| 肥佬影院91| 97在线免费视频| 天天操天天射天天日| 国产精品无码论坛| 国内91熟女人妻丝袜天天精品视频在线 | 欧美人与动性人交a| 99爱精品| 澳门成人网站久国产日韩| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 大香蕉乱伦视频网| 精品无人区麻豆乱码久久久| 97在线公开视频| 亚洲无992tv| 欧美爱三级日韩久久| 无套内射人妻在线播放| 亚洲AV小说| 91丝袜美腿片| 亚洲天堂男人| 亚洲乱熟女一区二区三区大香蕉| 美女干逼2| 亚洲日韩电影| 思思性爱| 91精品在线播放| 东京热一区二区中文字幕| 91精品伊人久久久大香线蕉91| 日韩人妻一区二区精品| 玖玖草久草99蜜月一区二区三区| 夜夜骑夜夜操| 亚洲 日本 一 二 三| 啊啊啊啊好疼视频| 2019久久久久久久久福利| 色色丁香| 蜜臀久久99精品久久久久电影| 国产毛片片精品天天看视频| 亚洲无码99| 97超碰总站| 91处女在线观看| 综合欧美日本三级| 欧美黑人91| 一区操逼日比视频| 少妇六月天| 97超碰中文在线| 桃花色涩综合影院| 亚洲文学偷乱拍啪啪啪啪| 国产91亚洲精品一区二区三区| 国产精品无码在线| 好爽免费视频,| 日韩在线观看三级电影| AV无码久久久精品| 骚货 中文字幕 av| 91色色色| 久肏视频字幕| 成人免费看吃奶视频网站| 人妻天天爽夜夜爽爽| 日韩一级二级三级| 99综合视频| 91五月天| 色黄色美女大长腿午夜视频| 射丝袜高跟鞋99| 精品熟女呻吟久久91| 91操碰| 国产精品夜夜夜| aaaa黄片| 天堂综合网| 丁香五月婷婷基地| 淫荡网址| 久久色一区| 免费精品无码一级毛片牛牛影视 | 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 日欧美色| 国产黄色小视频网站| 亚洲色9| 日韩欧美福利视频看看| 丝袜天堂| www.人人cao| 中文字幕在线第二页| JIZZJIZZ国产精品喷水| 久夜操| 91大胆欧美| 欧美色999| 久草精品国产蜜臀 | 99视频只有精品| 黑人娇小av在线播放| 午夜精品99久久久久传媒| 91大神精品长腿在线观看网站| 欧美一区二区三区大综合| 天天激情干| 伊人久大| 97在线欧洲| 亚洲国产一区二区入口| 丝袜美女诱惑 91 视频| 丁香五月性| 91在线视频国产网站| 麻豆九九九| 国产美女销魂在线观看不卡| 99久在线精品99re8| 色吧综合网| 精品人妻一二三| 青青草色插素人| 午夜高清成人在线视频| 中文字幕在线观| 蜜臀久久99精品久久久久免费观| 天天干天天狼在线视频| 欧美激情激情xxxx欧美专区| 男人天堂最新手机版在线青青草| oumeizonghese,www| 久久久精品无码亚免费| 插入逼91| 999国产精品999久久久久久| 10000部十八禁看电影| 影音先锋中文字幕日本好一区二区| 果冻传媒A片一二三区| 97天天摸天天碰| 国产美女裸体秘 永久无遮挡| 中文字幕av一区二区三区人妻少妇| 台欧久久精品视频| av国产无码| 日本影视久久免费| 久久久久久人体| 磁力99AV| 97视频网站在线观看| 久久久久久久亚洲Av无码| 天啪| 东北女人性交| 超碰69| 中文字幕一二三区| 99热综合在线| 五月天丁香网| 色情婷婷| 人人扣人人操| 色爱三区| 静品嫩模一区二区| 五月婷婷综合网| 欧美另类综合久久| 国产成人无码a| 男人午夜天堂| 亚洲欧美综合| 啊啊啊啊啊啊在线观看| 亚洲高清综合网| 亚洲人妻色图| 青青操日韩| 色拍偷亚洲| 久插综合| 91老熟女老女人国产老太| 午夜天天碰综合视频| 六月婷婷五月丁香| 男人夜色天堂ss| 熟女被操视频网址| 日本护士高潮| 粉嫩不卡一区二区性爱 | 天天亚洲| 亚洲资源站| 快灬快灬 一下爽蜜桃在线观看| 婷婷精品国产欧美精品亚洲人人爽| 精品国产自在在线99| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | wwe 天天干.com| 天天射网| 亚洲熟女综合| 成人久久精品| 成人天天爽| 青青三级视频| 国产精品。| 嗯嗯啊啊视频一区二区三区| 97超碰总站| 亚洲系列欧美| 蜜区区视频79| 夜夜爽夜夜爽| 国产午夜精品理论片a大结局| 91天天综合网| 亚洲欧美自拍偷拍| 国产97视频免费观看| 五月丁香社区婷婷日韩欧美精品影院| 日本性爱不卡视频| 精品国产一区二区三区av在线资源| 久久精彩免费视频| 日本高清电影欧美色图| 德国一二三不卡| 久插综合| 中文字幕精品三级久久久| 东北老女人的激情视频| 老女人碰碰在线碰碰视频| 精品人妻视频一区二区在线播放 | 69AV女优男人的天堂| www.欧精品| 99国产精品久久久久久久成人热| 熟女露脸激情自拍视频| 黄页av| 中文字幕黄片在线| xxx0国产在线播放| 亚州色交| 99爱久久视频频| 男生女生啊啊啊啊| 丁香7月婷婷| 国产一区二区在线播放| 欧美精品23| 浪人综合网| 国产精品大香蕉| 日本免费不卡二区| 亚洲综合有码| 精品九九国产无码| 五月婷婷大香蕉| 激情文学欧美| 美女十八禁| 欧美 精品国产制服第一页| 免费中文在线| 男人的天堂2018.| 少妇内射视频| 蜜臀久久99精品久久久久久酒店| 日本视频一区二区三区| 91扒丝袜综合在线| 日韩无码人妻中字久久三区四区| 夜夜操美女| 超碰99在线观看| 国产不卡中文字幕免费avi| 亚洲涩图欧美| 操逼逼一区视频| 操人91| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 国产精品久久久久999| 97色碰| 最新国产亚洲精品精品国产亚洲综合| 天天综合网91入口| 97视频网站| 日韩国产中文字幕| 久草精品一区 | 久久久人妻| 五月综合久久| 女上位精品在线| 老司机福利青青草| 成人午夜无码视频| 天天在线91| 中文字幕日韩精品久久| 亚洲欧美一区二区三区在钱蜜桃 | 亚洲不雅视频1区二区| 综合欧美激情网| 欧美综合第一| 国产成人91一区二区三区| 热久久这里只有精品| 激情情色五月天| 人人干黄色| 色蜜AV| 日曰骚久久精品| 亚洲成熟国产精品美女| 丰满人妻一区二区中文| 色哟哟511老熟女| 国产白丝在线| www.大香| 日日日日做夜夜夜夜做无码97| 精品国产一区二区三区香蕉欧美| 少妇69中文| 久久啊啊| 久都青青视频| 97超碰中文在线| 日韩人妻大香蕉| 91观看 国产白丝| aaa一级黄片| 亚洲情色 自拍| 欧美视频在线视频免费va| 中文字幕精品三级久久久| 人人爱人人操人人性| 91欧美美女日韩国产婷婷| 国产97视频| 国产浮力影院第1页| 天天在线91| 欧美日产国产在线成人第一区| 天天日天天舔东京热| 欧美探花网| 97天天在线| 婷婷视频在线免费观看| 极品少妇久久久久| 九九热九九热| 91人精品妻入口| 欧美91网站| 亚洲成人福利电影免费| 色眯眯av| 国产二区三区粉嫩在线| 三级日韩一区二区三区| 亚洲中文字幕97久久精品少妇| 丰满岳乱妇一区二区三区| 情色五月天久久久| 亚洲色图第四色| 日韩中文字幕二区| 欧美高清色| 黄色成品网站| 韩国成人精品久久久免费看| 96超碰网| 青青草字幕AV| 九九热免费视频| 国产免费黄色一级大片| 久久久久人| 91久操| AⅤ片水多多| 久久久久幕乱码| 白丝1区2区3区| 国产无码精品久久久久久| 自偷自拍的亚洲视频| 亚洲福利影院一区久久| 4虎在线视频| 99热成人| 自拍偷拍 日韩无码| 亚洲有码视频二区| 人妻五十路在线| 日本有码影片下载 | 狠狠夜色午夜久久综合在线| 中文字幕一区二区三区高清| 中文在线视频| 亚洲精品一二三四区| 国产 无码 一区二区| 懂色aV一区二区天美传媒| 色网1| 日韩情色视频| 操逼逼无码| 人人操人人干xxx| 欧洲亚洲人妻无码久久三区四区| 撸撸成人在线视频| 久久五月丁香| 人人干人人操人人..com| 久久AV无码AV| 9Ⅰ老熟女| 亚洲天堂电影网| 超碰 av 女人天堂| 91久久精品国产| 第一高清av中文字幕| 国产久久成人| 国产粉嫩蜜臀av一区二区三区 | 99热这里都是精品| 日韩激情中文字幕有码| 天天看天天在线精品| 中文字幕蜜乳av| 国产精品久久泡妞网站| 亚洲人精品久久久| 果冻传媒A片一二三区 | 亚洲欧美另类激情小说 | 国产亚州日韩欧美看片| 黄色AV免费| 91精品老女人| 少妇熟女一区二区三区| 熟妇色99| 中文字幕精品亚洲熟女| 2020中文字幕在线| 在线 欧美 亚洲| 日韩色图 一区二区| 色综合99999| 在线观看一卡二卡| 嗯嗯嗯嗯啊啊啊好紧好大| 九九九九久久久| 色情五月婷婷| 在线日韩视频| 国产原创自拍| 丁香六月婷婷| 天天日少妇逼AV| 可以免费观看的AV| 国产一级特黄大片处女| 亚州免费啪啪视频| 粉嫩粉嫩一区性色AV片| 免费观看的黄色的网站| 91精品国产高清久久久久久,亚洲成人 | 激情综合97| 欧美 亚洲 制服 精品| 91蜜臀熟女| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 秋霞 色色| 边做饭边操逼逼| 日韩欧美大片免费高清啪啪| 欧美一区二区日韩三区| 岛国网址国产 | 大香蕉一区二区在线观看.| 精品久久久久久中文字幕视频免费| 亚洲毛片基地专区| 三四中文字幕| 日本乱人伦片中文三区| 婷婷丁香九月| 一级免费啪啪片| 超碰av人人人| 97国伦国色| 国产精品久久久九九九| 婷婷丁香人妻 | 国产精品在线网站| 久久99干一本高清| 在线a亚洲视频播放在线| 色视频蜜乳| 五月天玖玖资源站| 激激五月| 极品AV网站在线观看| 亚洲图片 欧美电影| 欧美亚洲| 多乙久久久久久| 亚洲激情网一二三四区| 超碰人妻中文在线| 久久久久无码一妻区| 夜夜春夜夜操| 国模无码人体一区二区三| 日本性爱网址| 精品国产乱码久久久久久影片| 内射黑人| 蜜臀99久久国产| 日本韩国国产精品一区| 秋霞视频一区二区 | 亚洲97久久精品亚洲| 五月丁香色婷婷| 欧美综合色站| 躁躁日曰躁2020| 宅男91视频在线播放| 级品肉射| 亚洲精品99999| 人人看欧美性爱| 猛交交| 蜜乳av首页| 成人免费在线网站| 人妻嗯啊啊在线播放| 精品人妻一区二区三区夜夜| 插日本熟女视频| 亚洲素人综合| 蜜臀99久久国产| 欧美大香蕉同搞| 91女人的网站| 一本色道熟妇| 亚洲一卡2卡3卡4卡乱码网站| 69精品在线| 久久久一二三四区| 九色精品视频导航1| 欧美性爱一内片一区二区三区| 人妻熟妇一区二区三区| 国产极品粉嫩馒头一线天av| 精品精品精品| 男人的天堂久久| 成人性爱全视频观看| 国产丰满少妇久久久精品影院| 大香蕉综合网| 亚洲午夜av| 色哟哟精品1精品2| 深夜国产一区二区三区在线看| 亚洲少妇诱惑| 超碰免费97| 67914亚洲精品| 青青草久草AV| 日韩操啪| 亚洲国产精品久久久久婷婷青年| 人人妻人人澡人人爽久久av| 久久国内| 精彩国产视频播放1区2区| 青青草国产欧美非洲黑人| 99爱在线视频| 蜜臀AV午夜精品久| www.色婷婷.com| 久久女人| 天天色悠悠激情| 一级AAA片一区二区三区| 国产精品免费美女视频| 密臀成人视频久久久| 最新日韩黄片| 亚洲少妇激情一区二区三区| 日韩激情中文字幕有码| 加勒比性爱成人在线| 久久精品国产亚洲AV片多多| 国产在线精品电影观看| 久久av一级av少妇av高潮| 九九九九97| 中文字幕交换人妻| 麻豆九九九| 91丨豆花丨熟女| 久操在97| 2024人人操人人摸| 蜜臀久久99精品久久久久久婷婷| 偷拍欧美综合| 中国操逼无码| 免费亚洲国产精品久久一区| 91精品伊人久久久大香线蕉91| 美女上床网站| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 强奸乱伦AV网站| 欧美精品久久久久久久丰满| 深田咏美亚洲精品福利社| 97免费视频在线| 二级久久网| 极品极品色影院| 人妻天天爽夜夜爽精品2| 91综合天天看| 后入人妻一区| 日本精品第一视频在'| 99无码| 射丝袜大香蕉| 久久av成人无码免费| 久久久精品视频免费观看| 91丝袜美女视频| 超碰亚洲97| 草草影院最新网址| 综合 亚洲 欧美| 男人的天堂2018.| 国产伦乱91| 日韩簧片免费看| 91AV国产精品| 欧美韩国你懂得在线 | 噜噜瑟| 午夜啊啊啊| 日本在线一二 | 欧美性生活内射| 日韩性色b| 久久精品美女一区| 亚洲 小说 欧美 激情 另类| 亚洲区 欧美区| 人妻内射一区二区在线视频| 校园春色制服丝袜中文字亚洲| 丁香五月综合| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 国产67194| 国产美女口爆吞精视频| 77国产精品| 亚洲91av| 婷婷综合久久| 色综合av男人天堂| 免费αV在线视频| 色图四区| 天天日美女的B| 日日天天久久啊啊aaa| 亚洲色综合| 国产人妖视频一区在线观看| 伦激情人妻另类人妻| 欧美性爱第1 页| 色 婷97| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲男人天堂2017| 91美女视频直播| 97se综合| 亚洲丝袜99| 大香蕉之青青草原| 日本999精品| 在线观看A啊啊啊| 中文有码第五页| 97超碰色五月| 韩国女主播青草福利视频| 蜜桃视频精品一区二区| 亚洲精品三| 欧美天天干| 日本高清视频xxxx| 人人操人人爽人人操人人| 天美精品原创av片国产| 久久伊人最新网址视频| 国产日韩怡红院| 久久精品28| 日日操夜夜操天天操免费观看麻豆| 久久久久人| 玖玖爱伊人玖玖爱| 亚洲精品 欧美97色色| 情色大香蕉| 亚洲av资源| 9久久久久| 欧美性爱综合,免费| 日韩激情电影中文字幕| 亚洲字幕一区二区| 久久精品国产96精品亚洲拳交| 亚洲天堂7777| 激情婷婷| 日韩中文字幕熟妇人妻 | 无套内射性感少妇视频| 亚洲国产精品久久久久久久久久| 偷拍欧美激情| 操我啊啊啊啊啊| 日韩精品大香蕉伊人在线| 亚洲系列欧美| 超碰99在线| 国产成人亚洲精品无码最新在线| 视频黄色国产一级| www成人啪啪18秘 免费| 亚洲欧美激情另类色图| 精品国产91久久久久久一区黄无| 和协影院中文字幕三区| 亚洲图片视频小说| 在线免费观看高清无码视频| 欧亚性爱在线视频| 五月丁香婷婷综合网| 欧美日韩免费专区在线| 91麻豆一二三区| 国产白丝网站| 久久久亚洲Av| 丁香五月综合| 精品一区二区麻豆| 亚洲无码一区成人免费午夜| 翔田千里无码一区| 日韩人成网站在线播放| 精品视频123区小说区| 久久久精品一区二区| 天天欧美| 人人妻人射| 人人喜人人妻| 国外91| 亚洲欧美日韩中文播放| 国产精品免费视频人成| 国产精品亚洲四五区在线观看| 亚洲高清男人天堂| 26uuu久久| 欧美日韩黄色片一区二区三区四区人与兽做爱| 中文字幕久久精视频久久大全| 国产一二三福利视频网| 亚洲最新av无码成人精品区| 1024香蕉视频| 亚洲女人毛茸茸91| 成人26uuu| 99激情视频| 97爱碰| 中文字幕,人妻,日韩| 超碰99在线| 欧洲精品网| 97在线公开视频| 亚洲无码成人精品| 97色插| 男人的天堂久久久| 国产激情av女片自拍| 麻豆天美传媒在线视频天堂| 亚洲在线a| 白嫩国模丰满一二三区| 无码男人天堂| 欧美黄色片在线播放| 婷婷伊人一区| 综合五月天| 激情看片网站| 91亚.色| www.黄色在线| 黄色不卡视频| 都市久久精品激情亚洲| 男女激情黄色网址| 超碰98综合网| 草草影院最新网址| 伊人国产视频| 一二三区操逼国产91| 五月丁香啪| 俞拍久久国应视频| 嗯嗯啊啊视频在线看| 久久99久久99精品天美传媒棢·纸:. | 三级片大波波| 久久久久久久强迫| 国产精品天美传媒| 大象AV在线| 韩国轻伦国内自拍一区| 精品国产乱码久久久久久蜜臀| 天天日少妇逼AV| 大奶的诱惑| 在线观看AV不卡| 亚洲人天堂| 99热免费| 午夜天堂精品久久久久91| 家庭乱伦国产精品| 亚洲九九九| 精品九九九九九九| 天美麻花大全视频| 一区 欧美 日韩 麻豆| 天天综合,91综合永久| 五月丁香社区婷婷日韩欧美精品影院| 日韩无码黄色片| 18禁美女裸体无遮挡啪啪| 色婷婷五月天| 深喉吞精| 91天天日| 国产一级137片内射麻豆| 99久久久| 大象AV在线| 日日夜夜骚| 自拍视频一区在线观看| 色香伊人| 五月色丁香| 国产 日韩 欧美一区| 亚洲淫乱骚妇AV| 强奸乱伦中文字幕AV| 超碰欧美COM| 99热97| 大香蕉免费3| 亚洲日韩乱码中文无码蜜桃臀网站| 日韩AC| 欧美亚洲清纯| 国产精品老熟女一区二区| 日本东京热久久久电影| 日本久久999| 成人在线视频网| 无码精品久久久久久亚洲| 97操在线| 精品视频久久久久九九九九9999| 国产精品一区二区a| 熟女久久久| 青青操97| 日本国产高清色www视频在线| 97久久国产精品女不卡| 精品视频97| 激情AV| 日韩日本欧美在线观看| 搡老熟女国产1000部| 日韩免费人妻色情网站| 九九亚洲| 青青草玖玖爱| 91色女| 日韩性爱网址| 麻豆国产97在线| 久操视频在线| 久久偷拍人| 色婷婷久久| 强奸乱伦免费网站| 婷婷激情四射| 国产人人干| 国产一区麻豆免费观看| 久久婷婷精品| 色欲av一区二区三区蜜芽| 992视频一区| 偷拍色图| 看黑丝美女操逼青青网站| 911粉嫩人妻| 少妇啪啪自拍| 成片免费播放| 操www| 国产视频人人网| 精品国产乱码久久久影院| 天天天天天天天天综合| 精品久久久av| 五月婷婷丁香| 国产亚州精品美女久久久免费| 一级二级三级黑人无码| 超碰色综合| 99热这里只有精品1| 欧美大片一区二区三区| 欧美一区二区传媒| 91人人看| 伊人AAA| 色五月激情综合网| 操比国产| av无码精品久久久久| 亚洲无码成人精品| av网站免费线看| 国产色产精品在线观看| 男人的天堂2018| 欧美综合综合| 久久精品无码熟妇一区二区三区视频导航 | 97频视在线| 亚洲限制级| 91人妻丝袜无码| 加勒比在线视频| 97AV爱| 天美麻豆精品视频99| 激情五月综合| 淫妻综合网| 开心激情站| 色色色网站| 99九九精品| 五月婷在线| 婷婷五月天综合网| 日韩精品99999| 99热最新网址| 黑操B| 青青欧美在线| 亚洲熟女综合| 第二页中文字幕| 超硑97精品| 国产精品久久久久久久久久久久久久久久久久 | 久久岛国| 日人妻视频91| 免费看污网址| 五月婷婷六月天| 亚洲一区深夜| 综合日本女人伊人| 在线天堂999| 精品一久久久| 人妻超碰青青草98| 综合色久欲| 伊人九九| 一级性爱网| 91AV入口| 日韩在线一区二区| 久久香蕉国产线看观看猫咪av| 99天堂网| 国产精品久久久久久夜夜夜| 麻豆 亚洲 97| 69久久| 人人妻人人玩人人澡人人爽| av网站免费线看| 夜夜天天噜狠狠爱2021| 国产伦精品一区二区三区在线观| 免费中文在线| 欧美日韩夜夜| 亚洲黄色网址| 超碰在线91| 伊人骚琪琪亚洲天堂网站| 人人操人人爽人人操人人| 日韩美女操b| 久久人妻视频网| m欧洲一级午老| 茄子社区国产精品| 97欧美超碰| 国产精品制服丝袜清纯唯美| 七久久久| 97超碰久久色| 日本媚薬中文字幕在线| 国产成人99久久亚洲综合| 黄片在线免费在线观看| 蜜臀久久99精品久久久老,,| 人妻黑丝袜电影| 亚州男人天堂| 免费伦费视频在线观看| 五月婷婷色| 97视频900| 亚洲色图一区二区三区| 91在线精品| 亚洲欧美九九九| 人妻天天爽夜夜爽2| 免费精品国偷自产在线在线| 色色色色网站| 久久久性爱视频| 成人精品久久| 国产精品亚洲一级av第二区| A V少妇特黄三级| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 日本性爱不卡视频| 麻豆视频test| 欧美综色欧| av日韩国产一区二区| 国产精品视频电影| 亚洲双插| 93人人操人人| 九热大香蕉| 国产精品96| 免费一级a毛片久久久久久鸭绿欲| 中文字幕日韩综合| 91中出在线| 八人操人人摸人人看| 91 国产丝袜在线放观看| 熟女熟妇一区二区三区视频| 欧美日韩另类在线播放| 高清不卡国产| 国产精品视频在线观看| 91人妻尻屄视频| 日本三级久| 亚洲欧美内射| 天堂а√在线最新版在线| 8050午夜少妇无码| 青青草日逼视频| 婷婷丁香人妻| 无码自拍SM| 欧美色道啊| 91在线精品| 精品无码久久久久| 国产精品麻豆免费视频| 91丝袜美女| 国产一国产一级毛片古装| 95人妻爽爽人人做人人澡 | 九一屌逼| 国产品精品自在在线午夜免费| av在线资源| 91精品国| 色欲天天综合网| 欧美日韩不卡传媒| AV电影在线播放| 久久69精品久久久久久久| 麻豆国产av网| 亚洲一级黄色毛片| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 激情综合二| 俞拍自拍| 91成人久久| 久久↗↗| 极品极品色影院| 国内毛片四区| www色色com| 日夜精品| 偷拍欧美激情| 亚洲av综合伊人久久| 天天综合网1| ji熟女.com| 精吧天堂| 欧美在线干| 一区二区三区一亚洲中文字幕、综合区灬 | #NAME?| 国产18精品亚洲精品| 麻豆天美AV传媒第一页| 日本大片日本一区二区免费高清| 超清中文乱码字幕| 天天操女人| 91情色| 中美日韩毛片| 波多野结衣先锋影音| 熟女熟妇一区二区三区视频| 久久久久久久人妻| 啊啊啊啊啊啊啊啊视频| 久久天天躁日日躁狠狠躁| 午夜一区二区三区国产| 亚洲欧美激情小说| 婷婷香蕉欧美在线一区二区三区| 毛片一区二区| 夜夜操中文字幕| 丁香五月激情综合| 老熟女乱伦一区| 久欲AV| 婷婷五月天伊人| 豆花视频操逼网址| 天天综合站| 日本天堂网| 日本性爱少妇| 国产熟女无套内射| 欧美色图天堂在线| 高清国产无码av| 欧美成人国产精品| 久青草影院| 国产亚洲福利第一页丝袜| 97视频7| 精品v日韩欧美国产| 一本大道久| 77777亚洲蜜臀精品久久综合蜜臀| 国产女s强制榨精视频| 黄久在线| 亚洲成人碰碰| 狠狠操官网| 999色欧美中文字幕| 欧美色偷拍| 成 人片 黄色大片| 国产精品另类一区大香蕉| 日韩中字av一区| 美國A片| 久操视频这里只有精品| 欧美无圣光在线| 免费啪啪啪网站18岁| 国语对白露脸XXXXXX| 综合色久欲| 97蜜桃综合| 91精品久久久| 97在线视频免费观看| 成人开心网在线视频| 欧美aⅴ99久久黑人专区| 九九无码久久精品视频| 精品-91人妻子系列| 9久综合网| 久久伊人青青草| 91欧美色| 日韩欧洲操屄视频| 久久精品日韩| 亚洲人妻一区二区三区| 日本一二三免费久久| 日韩免费大片一级播放| 日本中文字幕在线视频| 日韩操p| 一区二区三区在线资源| 天天插天天干| 日韩精品午夜操呦呦不卡影院| 99在线无码精品秘 入口黑人| 91高跟美女在线播放| 91看黄片| 北京美女一区二区| 久久久少妇诱惑精品视频| 9丨久久九九九| 成人 日韩欧美一区| 久久蜜桃一区二区| 人妻啊啊人妻啊| 九九九九九九视频免费| 黄总AV色图| 国产高清免费不卡av| 肉丝无码中文高清| 亚洲操逼视频网站| 97超碰色色| 粉嫩国产精品久久久| 久久性爱网站| 亚洲综人网| 欧美视频在线第3页| 日韩视频精品在线观看| 美腿丝袜高跟网免费视频免费视频| 草草影院日本第一页| 日韩 欧美 国产 麻豆| 啊啊啊不要好疼视频| 搡老熟女免费视频| 日韩欧美蜜桃精品久久中文字幕久久| 国产精品久久久久综合| 天天懆天天日| 欧美伊人电影| 麻豆精品三区视频| 五月丁香啪啪| 久久精品国产亚洲AV无码做| 欧美综合网站999| 亚洲91网站| 麻豆国产av网| 成人欧美一区二区三区黑人一| 天天爽夜夜爽夜夜爽精| 91热| 欧美第二页午夜| 久久久久久久久久久久九| 在线观看一卡二卡| 久久久国产三级黄色片| 天天谢天天干| 91精品无码久久久久久久| 人妻熟女一区二区在线视频| 91处女在线视频| 麻豆一区二区三区精品| 91欧美偷拍| 蜜桃色色网站视频三区| av天堂影视中文在字幕在线中文 | 久草尤物| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 中文字幕av片| 久久同城AV| 91久久堂| 性爱AV天堂| 欧美黑人91| AV久日| 91少妇人妻| 大色综合| 先锋影音av先锋一区| gogogo免费高清看中国国语| 日韩AV无码中文一区二区| 伊人色综合网电影| 影视综合无码少妇| 欧美精品成人一区二区在线观看 | 国产按摩一区二区三区| 国产高清26uuu|