色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

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
返回資訊列表
婷婷色香| 亚洲色欲一区二区三区| 精人妻一区二区三区| 色色无码| 极品尤物自安慰| 亚洲av成人精品一区| 亚洲精品一卡二卡三卡福利视频网站| 色婷婷婷五月天激情四射| 狠狠激情综合狠狠操中文字幕| 国产偷人伦激情在线观看| 国内一区二区三区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 超碰碰小说97| 亚洲少妇激情视频| WWW4虎| 国产成人无码网站在线视频| 免费观看的黄色的网站| 欧美高清18A片| 啊啊在线| 色踪合AV| av线电影| 超碰天天操| 亚洲情色五月天 | 校园春色五月天| 91AV国产精品| 天天综合网~91综合网| 亚洲综合图文| 新视频sss国产| 欧美大码在线视频| 91欧美高清| 亚州色图第三区| 狠狠色综合网| 亚洲综合在线视频| 日韩偷拍色图| 久久偷拍人| 久草婷婷| 欧美日韩中国x| 日日夜夜模| 3PAV乱伦视频| 蜜臀久久99精品久久久久电影| 色99色| 在线看片国产精品每日更新| www.91逼逼.com| 久久久久久久久久va| 影音先锋每日最新资源在线观看| 日本东京热加勒比久久| 伊人久久婷婷| 青青草原人妻| 国产熟妇一区二区| 高跟伊人julia ann| 日本伦理一区二区| 久久综合久色欧美综合狠狠 | 色牛aV| 9ⅰ久久久天天| 欧美se亚洲| 国模91| 国产精品另类| 午夜亚洲WWW湿好大| 欧美操逼熟女| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 99ri视频| www.色五月| 九99久久| 欧美亚洲高清晰| 亚洲在钱| 亚洲男人天堂av| 亚洲国产精品无码AV久久| 欧美日韩亚洲天堂| 婷婷超| 91肉片| 91在线国产后入风骚翘臀美女素人| 国产精品国产自产高清AV| 91 丝袜在线播放| 老子午夜伦不卡影院| 一起草欧美| 18禁的网站在线| 在线99热| 2020中文字幕| 欧美精品xxxwww| 特级丰满少妇一级AAAA爱毛片| AAAAAAAAA黄片| 国产www色在线观看| Blackedraw视频一区二区| 亚洲乱码国产乱码精网站| 东京热视频网| 四虎影视精品| 91色伦| 成人26uuu| 九九久久久九九| 综合伊人激情| 97热视频在线观看| 久久色情| 天天综合-91入口| 久久久久亚洲一区女同性恋中文字幕| 欧美不卡在线一区二区| www.高清无码诱惑一区.com | 天天色综亚洲91污| 后入合集| 亚洲美女30b| 97欧美性爱| 九九九国产精品| 这里有精品| 国产福利合集| 国产黑白丝在线| 99久久综合| 中文字幕美女91| 亚洲精品九九九九九九| 九九久久99| 亚洲熟女人妻中文字幕一区二区| 97在线免费视频| 9久精品| 91情色在线| 久久国产精品一级二级三级| 先锋色眉乱伦资源| 白丝少妇一区二区| 中国AV美女| 中亚av| 伊人九九九| www.人人cao| 欧美色图97| 国产毛片久久久久久久| 亚洲乱色熟女一区| 日韩欧美午夜一区二区| 日本久久女同性恋视频| 性色avv| 美日韩成人| 欧美最大综合网| 一区二区三区欧美激情| 嗯嗯啊啊啊好爽| 无码免费一区二区三区啪啪| 屁股久久久久久| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 久久夜夜| 一起草三级AV电影在线观看 | 亚州免费啪啪视频| 欧美性爱三区二区| 久99| 日本淫色网| 精品视频在线观看| 丁香婷婷五月| 欧美日韩操逼动图| 亚洲精品久久久久久久久豆丁网| 777超碰| 超碰97在线中文| 色香综合天天影视综合| 5252色欧美在线男人的天堂| 嗯嗯不要 视频| 欧美色图另类图片| 国产9 9在线 | 亚洲| 超碰精品日韩欧美国产| 婷婷激情五月天小说网| 99色色网| 欧亚揄拍偷拍精品视频 | 人妻一区久久二区三区色播| 二三四区精品| 欧洲亚洲人妻无码高清久久三区四区| 做爱A级亚欧| 亚洲av综合色区无码一| 午夜精品一区二区三区三上悠亚| s片在线观看| 亚洲九九视频| 曰韩精品视频一区二区| 亚洲 欧美都市激情| 欧美 熟女 日韩| 天天舔日美女视频| 欧美黑人精品在线播放| 青青11操操操操操操操操| 男人的天堂在线| 97超碰9| 日韩人妻中文视频| 麻豆国产第一| 影音先锋每日最新资源在线观看| 婷婷91| 欧美性暴力| 91露脸熟女专区| 97天天搞在线| 区日韩亚洲乱码av电影| 久久綜合很很很| 91爱| 欧美国产欧美在线观看| 在线观看中文av字幕| 婷婷综合在线观看| 少妇一级无码精品| 亚洲导航深夜福利| 成年女人黄网站| 麻豆国产精品午夜视频| 少妇色| 蜜臀av一区二区三区免费观看| 色香综合天天影视综合 | 爱我干综合| 久久久久久久久9| 91日韩在线| 国内外激情在线| 综合五月天| 秋霞网无码| 9 1超碰九色| 综合激情五月天| 国产精品自拍视频| 嗯,啊。舔我逼| 色综合网1| 友优传媒精品在线一区二区| 宅男91视频在线播放| 国产 日韩 欧美高清| 欧美偷偷网| 九九九九久久久| 四虎国产精品永久入口| 涩亚洲欧洲| 亚洲天堂中文字幕无码男同| 欧美呦呦性爱| 亚州伊人色综台| 欧美激情片一区二区| h色99999| 操国产逼| 不卡av在线中文字幕| 九九Av| 欧美性爱一级操| 九九成人精品| 欧美天天谢综合网| 国产激情久久久| 无套内射人妻在线播放| 丝袜综合网| 国产精品午夜福利视频| 综合网久久| 波多野结衣被操50分钟免费视频| 天美91| 精品欧美乱码久| 国产精品毛片| 一区二区三区四区在线不卡| 日韩大香蕉精品在线视频| 成人AV素股で擦久久| 日韩精品永久在线观看| 高清无码 国产精品| 一区操逼| 岛国片国产成人亚洲播放| 国产极品粉嫩馒头一线天av| A级片日韩欧美国产欧美视频精选观看| 激情五月天视频| 98超碰日本| 国产成人欧美一区二区三区的国产| 亚洲风情在线观看| 国产无码精品无码| 成人三级片无码| 天天天干977| 青草精品视频-日本久久久久网站| 久久精品国产亚洲AV清纯| 国产日韩区| 久久精品色欧美aⅴ一区二区| 婷婷性爱| 97超碰亚洲| 日韩BBN| 无码久久国产| 日本狠狠干| 嗯嗯啊啊好疼| 加勒比aⅴ| 成人免费看吃奶视频网站| 牛牛aV| 麻豆乱码久久精| 亚洲图片视频小说| 在线岛国新天堂8| 91粉嫩萝控精品福利网站_精品影音先锋国 | Av手机版天堂网| 99热日本| 亚洲精品久久一区二区三区蜜桃臀| 中出91视频| 欧美高清无码免费视频高清版| 九九无码视频| 中文字幕精品久久久久人妻红杏ⅰ | 999久久久九九九九| 亚洲精品三区在线观看| 国产原创精品| 久久9精品| 日韩成人精品视频自拍| 国产美女91视频| 久久99九九九九6666免费观看软件| 亚洲最新av无码成人精品区| 国产精品制服丝袜中文字幕日韩一区二区三区 | 欧美人妻少妇| 久久久草成人网站久久久草成人久久久草久久久 | 97 国产一区| 婷婷超| 97WW精品| 精品欧美乱码久| 亚洲1区| 新91视频.cmp| 开心五月婷婷激情| 夜夜爽夜夜高潮夜夜爽| 久久久久久亚洲精品不卡人乳| 人人摸人人舔一区二区| 日韩丰满熟妇| 亚洲国产亚洲天堂| 另类小说五月天| 中文字幕一区二区三区四五区| 九九久久一区二区伦理| 动漫av中文| 宅男影院久久久,99| 亚洲一二三四区机械| 黄片www视频免费| 亚洲色吧网| 99re这里只有精品9| 天天弄天天操| 69天堂| 欧美色图亚洲色图成人在在线| 欧美综合亚洲综合| 97视频观看| 91无码西班牙视频在线| AV天堂电影网| 午夜无遮挡男女啪啪视频| 美女淫穴| 亚洲中文字母在线播放| 久热精品在线| 欧美乱色| 探花一区在线| 91丝袜美女视频| 欧美日韩99精品麻豆传媒| 欧美不卡在线一区二区| 欲色啪| 成人精品在线| 免费观看日本操逼视频| 欧美亚州色的图| 国产精品亚洲一区二区三区四区| 96国产精品| 五月婷婷六月丁香| 性久久久| 久9爱精品| 日韩国语字幕| 欧美αv.com| 97欧美资源| 精品网站9999| 成人午夜无码视频| 久久国产在线一区二区| 黄色交缠性感爆操91国产精品免费一区二区三区 | 久久夜色一区二区| 任你草| а√天堂资源官网在线资源| 欧美操逼录像国产黄色国产| 91色爽欧美| 五月天婷精品激情| 可以免费看黄片的视频| 国产精品另类| 天堂资源站| 大香蕉伊人色偷偷在线| 成人麻豆av电影网站| 久久亚洲日韩熟女精品| 综合网欧| 欧美夜夜狠| 精品久久久久久中文| 久艹日日日| 色香伊人| 久9久9精品| 校园春色之综合网| 黄片直播三级黄片两女一男| 亚洲国产精品无码AV久久久| 九九九九九九九九九国产精品 | 日韩97视频| 四虎884a| 久久a久久| 黄色av一区二区在线| 欧美福利视频啊啊啊啊| 91综合网在线| 久久爱97| 超碰97.com| 蘋果手機免費看成人Av| 宗合情欲网| 狠狠狠一区二区三区| 免费看日产一区二区三区| 欧美人人曰人人操人人射射| 欧美亚洲高清| 欧美成人精品欧美一级乱黄一区二…| 亚欧美综合网。| 91精品人妻一区二区三区蜜桃臀| 狠狠久久亚洲欧美专区| 人妻天堂综合网| 99热9| 91精品大奶人妻| 操逼操网| 五月丁香社区婷婷日韩欧美精品影院 | 国内外激情在线| 后入式五六区| 婷婷五月天色网| 智利AV在线网| 91N综合网| 久久精品无码熟妇一区二区三区视频导航 | 黄污污污污| 日韩欧美视频青青| 国产丝袜美女诱惑| 日韩美女久久一区二区三区| 夜夜操老骚逼视频网站| 草伊人高潮喷水超碰| 青青草原综合久久大伊人精品| 国产又粗又又黄又猛| 丁香六月婷婷久久综合| 久超碰在| 91N综合在线| 国产精品天干天干综合网麻豆| 东北老女人的激情视频| 国产丸一视频| 久草免费在线视频| 日韩三级在线观看网站| 中文字幕日韩精品久久| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲九九视频| 91少妇人妻| 亚洲阿v天堂在线| 一级人妻性爱视频| 手机在线观看不卡无码av| www网站黄| 99综合| 熟女丰满人妻一区| 91综合国产精品| 综合色久欲| 春色91| 日韩激情无码影院| 五月丁香影院| 屌妞视频久久久久久久久久久久| 久久精品一区二区三区蜜桃臀| 一二三区视频在线观看| 欧美亚洲自拍另类人妻| 久久人人舔人人爽舔人人av片| 五月丁香激情啪啪| 91中文精品日韩欧美在线| 亚欧美综合网。| www.91视频网| 啪啪视频亚洲第一| 亚洲中文字幕噜噜噜久久久| 秋霞福利网| 91精片| 三级三级三级a级全黄三| 在线只有精品| ai欧美亚洲小说| 亚洲资源一区| 日韩欧美国产一区二区三区四区| 综合网,亚洲,欧美| 日韩电影免费网站麻豆视频| a级免费在线观看| 婷婷视频在线免费观看| 色女综合| 69精品| 人妻精品一区二区在线| 91爰爱欧美| 亚欧成人一级片在线播放| 青青伊人这里只有精品| 美女的肌被草喷水视频| 久久久久久九九九| 婷婷色色网| 欧美亚洲宗合色性图| 秋霞怕怕片| 99热在线播放| 日本久久久久久久久久| 黄色AAAAAAAAAAA大片| 久艹日日日| 自拍偷拍2025在线观看| 97在线观看免费视频l| 久久伊人最新网址视频| 色婷婷成人| 午夜福利一区二区三区四区五区色婷婷| 婷婷超| 欧美1727免费观看视频| 97视频在线观看免费高清| 国产呦精品一区二区三区下载| 又摸又舔在线观看网站| 成人av福利在线观看| 禁止观看美女黄| 玖玖综合网| 丁香五月天视频| 国产激情在线| 骚逼高潮久久精品| 午夜毛片亚洲精品片国产久久久| 五月天色五月| 91成人无码| 色嘟嘟人妻天堂网| 探花视频免费观看国产专区| 97色插| 人妻一区二区三区四区视频| 久久综合日韩亚洲欧美| AAAA欧美日韩| 9精品在线| 亚洲另类小说卡通动漫| 日本精品久久久久久久| 成人免费在线网站| 青青草大香蕉视频| 麻豆精品久久久久久久| 1769成人国产精品视频| 日韩少妇丰满亚洲| 3P乱轮视频| 玖日综合网| 激情五月天综合网| 欧美一区二区三区不卡高清视频| 99热导航| 丁香五月影院| 国产精品盗摄 偷窥盗摄| 伊人991| 欧美系列在线一区二区| 精品人妻一区二区三区-国产| 欧美色999| 久久综合日韩亚洲欧美| 无码视频黄色网战| 色综合一区二区三区| 极品后入免费视频| 91色噜噜狠狠| 欧美高潮| 91搞逼视频| AV老汉| 青草视频在线看看看看看看看看看| 思思性爱| 午夜男人的天堂| 97精品视频免费| 日本亚洲熟女视频| 国产做?爰片久久毛片?片美国| 大香蕉乱级| 97神马久久| 丝袜制服字幕在线| 一区二区偷拍拍视频| 天天操天天干一区二区 | 亚洲影院365| 91久久青青草原精品| 在线毛片片免费观看| 日韩精品电影| 婷色五月天| 日本日逼高清| 亚洲色狠| 亚洲图片视频小说| 牛牛久久国产精品视频一二三| 高凊专区人人操| 天美精品av| 中文字幕在线高清男人的天堂 | 99啪啪视频| 国产激情视频一区区三区| 嫖老熟女A片一二三区| 91P0RNY大屁股人妻| 国产精品久久久久久久AV大片 | 色情五月综合婷婷| 日韩精品.久久精品.AV女优.天美传媒| 婷婷五月天小说| 色香AV| 免费a级毛片av无码久久精品中文字幕| 欧美人妻另类在线| 青青草啪啪网| 色月天AV导航| 欧美另类色| 超碰人妻在线| 日韩欧美国产高清视频| 国产精品999zyz| 少妇厨房愉情理伦片bd在线观看| 国产白丝AV| 99热这里只有精品1| 国产天美传媒精品| 粉嫩少妇自慰在线| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 中文字幕在线观看网页| 12一15性XXXX粉嫩国产| 超碰美国| 深夜国产福利| 日韩在线电影| 麻豆AV一区二区天美传媒| 精品成人无码| 极品久久久久久久久久久久久久| 夜夜夜久久| 人妻少妇久久久| 久久久久久久久久8888| 超碰人人色| 99热只有这里有精品| 人人摸人人添人人操| 中文字幕一区二区日韩网| 亚洲学生妹高清av| 国产高清午夜成人在线观看| 激情小说在线视频| 一起草三级AV电影在线观看 | 69精品人人人人| 欲色影视综合吧| 久久久熟妇熟女国产| 91麻豆天美传媒HD| 欧美激情片一区二区| 美女主播色欲91抠b在线播放| 伊人丝袜美腿高跟在线观看高清| 久久久久久中文版| 97天天在线| 欧美丝袜91| 日本天天干天天操一区| 狠狠色伊人亚洲综合网站色| 无码国产Av| 久久久免费的精品| 五月天丁香| AND人妻系列| 熟女一区二区三区| 人、人、摸,人、人、草| 亚洲精品美女久久久久久久久| 国产女人成人精品视频| 丰满欧美少妇| 久久国语| 久久久久久九九九| 亚洲一区二区三区播放在线| av资源在线观看少妇| 久久综合18p| 国产日韩欧美| 999综合网| 可能人人看人人摸| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 久9热| 日本三级小说中文字幕| 青青草中日韩在线| 激情小说在线视频| 岛国艾薇凹凸视频天堂| 78综合网| 亚洲情色无码一区二区三区| 国产精品不卡av免费在线观看| 亚洲αv一区二区三区| 天天爽天天| 亚洲色入欧美| 国产色产精品在线观看 | 成人情色综合网| 少妇高潮流水av免费| 影音先锋国产精品| 韩日精品福利视频一区不卡在线免| 久热伊人| 日本操BAV| 欧美精品丝袜久久久中文字幕| 黑丝制服中文字幕| 综合免费无码中文| 精品国产一区二区三区久久久蜜臀| 激情视频图片| 国产绿奴视频在线观看| 丁香五月天婷婷姐| 天天干人人乐| 国产麻豆一级精品视频| 欧美 日韩 另类 亚洲| 亚州一区二区| 婷婷啪啪| 青青草公开在线免费不卡视频| 强奸乱伦AV网站| 日少妇亚洲版| 四虎精品永久在线播放| 一区二区三区在线资源| 亚洲中文sv| 自拍大香蕉乱插| 欧美影音在线| 精品人妻av在线播放| 亚洲棕合电彰| 国产乱伦视频污| 欧美夜夜狠| 色九久| 激情AV| 99自拍视频| 超碰久在线天天做| 日韩 欧美 视频 在线 一区| 欧美在线l亚洲| 人妻献身系列第54部| 久久伊人网视频一区二区三区| 热天堂一区二区| 91丝袜美腿片| 九九九九一级| 中国黑人三级片网站上区| 综合久久中文字幕综合日韩精品| 粉嫩小泬久久久一区二区| 日韩精品色呦呦| 75大香蕉| 精品人体无圣光凹凸| 97在线观看免费视频l| 免费精品人妻一区二区三| 热热热热日日漂亮永久永久国产日| 亚川综合视频| 天天日美女的B| 国产精品自产拍在线观看社区| 亚洲熟女少妇免费视频| 久久激情综合| 欧美色999| 97超碰色屌| 日韩人妻一二三区视频| 九热超碰| 精品久久一区二区三区四区五区| 97操| 性爱AV天堂| 中文字幕日本久久| 夜夜嗨视频| 夜夜狠狠躁日日躁色视频| 台湾成人无码AV| 91在线国产后入风骚翘臀美女素人| 91啪啪视频| 2024黄色视频| 人妻熟妇久草在线| 日韩啪啪啪啪啪| 精品国产乱码| 就去色综合| 亚洲天堂另类小说男人| 强奸乱伦麻豆| 国产精品视频内谢女人| 97就爱干| 九九久久首页| 欧美v亚洲v日韩v最新在线二区| 美女黄站| 加勒比少妇AV婷婷六月天超碰超碰| 日本九九九九| 欧美大香蕉97| 一区二区娱乐网站| 欧美综合国产精品久久丁香| 青青草华人在线欧美在线| 久久久久久久极品香蕉视频| 欧美大香蕉同搞| 亚洲自拍97| 秋霞福利网| 欧美少妇大量自拍视频在线观看| 肉嘟嘟www视频在线观看高清| 久久午夜色播影院免费高清| 日本不卡一区二区三区| 91丝袜美女| 久久99视频| 国产精品美女在线一区| 蜜臀久久99精品久久久久久-DVD原版全| 九九国产| 另类亚洲图色| 青青网三级视频| 人人干人人操人人..com| 青娱乐淫乱1314| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 少妇久久久免费| 日韩精品人妻系列无码天堂| 亚洲AV成人在线| 精品一区二区成人| 综合av社区| 日本熟妇浓毛hdsex| 一本大道青青| 亚洲素人综合| 色网综合网| 综合激情97| 亚洲情色五月天 | 操逼逼中文字幕| 国产精品4p在线观看| 999精品久久久久久久| 亚洲成人在线资源| 夜色97| 加勒比伊人综合| 美腿丝袜高跟网免费视频免费视频| 99色悠悠| 一二三四日本视频高清| 婷婷中文字幕| 美女黄色一级A视频| 色色五月天婷婷| 99久久99九九99九九九| 无码国产精品午夜不卡(| 国产高清MV操逼视频| 成人激情无码在线视频| 精品高清一区二区三区三州| 99老司机精品视频在线观看| 午夜无遮挡男女啪啪视频| 国产福利视频精品视频| 久久午夜鲁丝片| 久久久久久电影| 操操逼操操逼操操逼逼| 国产小黄片在线免费观看| 国产妇女精品视频青青草| 久久伊人网视频一区二区三区| 啊啊啊啊啊在线观看网址| 91久精品| 久久久18禁| 亚洲天堂日本| 热久久无毒不卡| 大香蕉人妻久久| 蜜臀视频网站| 豆花视频操逼网址| 欧美成人四级在线播放| 欧美性爱十八禁| 五月天社区| 丝袜AV一二三区| 亚洲大色堂| 欧美一二级| 夜夜爽夜夜操| 日韩免费高清大片在线| 亚洲成a人在线观看久| 日本精品成人无码| 91美女在线精品视频| 玖玖综合色| 色综合 加勒比| 久久久久久久9| 欧美午夜视频免费观看| 色爱国产| 亚洲色图 欧美热图 清纯唯美 另类自拍| 75大香蕉| 美女t无毒不卡不卡| 国产高清亚洲日韩一区| 国产精品无码av在线 | 欧美第二页午夜| 人妻少妇精品视频一区二区三区| 日韩字幕一区| 亚洲夜夜欢无码一区二区| 91xingse| 天天天堂影视日韩亚洲91| 清纯唯美激情| 天天干天天燥| 青青草视频久久| 美日韩在线不卡人妻| 色婷婷日韩精品一区二区三区| 百度百度日本操逼| 久久高清欧美国产| 亚洲熟妇乱女区二区三区| 啊啊啊啊啊啊啊啊啊在线观看| 超碰美国| 黄片www.| 精品然女一区二区| 四虎免费在线观看| 爱av免费| 久日91在线| 色婷婷一区二区三区久久| 黑人操一区二区| 97一区二区蜜臀| 欧美色综合网| 久久久免费一级黄片| 激情抓乳插进去啪啪啪日韩| 嗯嗯啊啊视频在线看| 台湾佬中文娱乐网久久久久久久久久com | 精品无人区麻豆乱码久久久| 黑白配性爱AV成| 天天操天天干一区二区| 宅男91视频在线播放| 国产精品久久泡妞网站| 天天躁日日躁AAA片李宗瑞| 东京热av男人的天堂| 四虎精品永久在线播放| 色玖玖| 欧美亚洲韩国视频十五区 | 亚洲欧美日韩精品久久久一区二区 | 五十路熟女工口| 国产精品美女视频诱惑| 亚洲少妇色| 啪啪啪男女亚洲中文字幕99| 亚洲无码AV九九九| 97视频www| 人人干黄色| 熟妇视频一区二区三区在线观看| 欧美九九九九九| 色婷婷影院| 香港久久久| 中文字幕av乱伦| 日日日日做夜夜夜夜做无码97| 国产亚洲精品农村妇女| 98精品国产乱码久久久久久| 操操逼视频| 97看操| 老熟妇一区二区三区…| 亚洲欧美日产国产91毛片| 中文字幕一区二区三区字幕| 综合天天网| 九色精品视频导航1| av线电影| 亚洲蜜桃V妇女| 久久久女人| 丁香五月天激情综合| 91精品人妻一区二区三区蜜桃| 欧美久热| 午夜操一操| 色婷婷综合久久久久中文一区二区| 国产精品久久久久久久无码AV| 久久超碰、| 青椒国产97在线熟女| 日韩人妻丝袜美腿中文| 激情五月天丁香社区| 日本精品加勒比海一区| 亚洲不卡AV在线| 91久久久亚洲| 欧美日韩精品久久| www黄片免费看com| 日本媚薬中文字幕在线| 一区黄二区黄| 日韩精品一区二区日韩| 九久久精品| 一区二区激情国产熟女 | 翘臀vidoes| 99久久精品无码一区二区毛片免费 | 中文在线久久字幕| 男女激情黄色网址| 老熟乱一区二区三区四区| 91蜜臀熟女| 人人操人人插人人摸人人干| 国产精品97超碰| 亚洲 欧美 中文 日韩超碰| 一级毛片久久久久久久女人18| 久久国产999| 97舔舔| 欧美人妻久久精品二区三区| 天天cao在线| 熟女AV一区| 91无码中出人妻视频| 操www| 麻豆av一区二区| 亚洲情色在线| 五月天激情国产综合婷婷婷| 秋霞一级A片黄色视频| 婷婷精品久久av影视| 久久一区,青青青青草视频在线播放| 97人人操人人摸| 91精片| 久久久少妇诱惑精品视频| 啊好大好舒服| 欧美婷婷五月天| 8x福利精品第一福利视频导航| 98福利在线视频| 超碰79人人乐| 中文字幕 国产 精品| 国产av激情无码久久天堂| 亚洲人码13| 91jk色拍| 先锋精品av色鲁| www色日本| 午夜超爽| av毛片aaaaa免费看| 五月天久久人妻| 日本精品久久久久久久| 97爱欧美| 久久久精品国产亚洲伊人| 探花一区在线| 成人亚欧免费视频| 欧美A片中文字幕| 亚洲97在线观看| 国产97色在线 | 亚洲| 成人在线午夜视频一区| 大香蕉99热| 91原创在线观看| 五月天开心网| 久久精品店| 国产日韩欧美亚洲精品95| 亚洲AV无码乱码| 国产性爱强奸乱伦大全| 9丨久久九九九| 日本一二三免费久久| 九久久精品| 亚洲熟妇综合久久久久久| 九九九九九九成人| 欲色影视综合吧| 成人无码专区精品视频| 91蜜臀在线久久久久| 91亚洲黑人| 一区二区你上我| 人妻激情偷乱视频一区二区三区| 五月丁香综合啪啪| 国产超碰| 亚洲操逼网| 91狠狠综合久久久久久| 色九九综合| 色色五月天婷婷| 人妻少妇精品一区二区三区| 在线播放成人网站| 婷婷激情五月| 亚洲午夜免费狠狠干| 女人的久久久| 中文字幕日韩国产传媒欧美精品| 精品国产少妇高潮视频| 麻豆视频test| 怡红院怡春院| 欧洲亚洲人妻无码中字久久三区四区| 九九热超碰97亚洲最新香蕉 | 欧美色道啊| 午夜噜噜噜| 久草久热| 亚洲国产综合久久天堂| 蜜臀久久99精品久久久久免费观| 亚洲精品天天影视综合网 | 91性| 色九九九九九九| 少妇天堂| 人人操人人爽人人操人人| 岛国片在线播放| 亚洲乱码国产乱码精网站| 7777欧美成是人在线观看| 色五月婷婷在线| 99re这里只有精品3| 天天影视射综合网| 高清孕妇孕交 交孕妇| 啊啊啊啊免费视频| 国产在线综合福利网站| 欧美精品99久久久**| 亚洲精品成人激情在线| 婷婷色一区| 欧美大片天天看| 欧美日韩中文字幕不卡| 3PAV乱伦视频| 中日韩熟女| 97色色视频| 久久內射| 四虎av在线| 精品无码一区二区三区| 日本国产欧美高清在线| 日本91白丝| 久日综合网| 欧美美女视频| 亚州一区二区成人片免费| 99热精品在线播放| 精品亚洲俞拍视频一区| 青青草依人大香蕉| 天天爽夜夜爽夜夜爽精| 色狠狠色| 情侣操 逼视频99| 91国模| 成人三一级一片aaa| 天美传媒国产原创中文字幕亚洲欧美另类 | 91麻豆一二三区| 囯产精品久久久久久久久久二区三区| 亚欧成人综合影院| 人妻啊啊人妻啊啊| 风月影院男女十八禁| 男女无套 免费网站| 人、人、摸,人、人、草| 2025亚洲男人天堂| 强乱老妇中文字幕| 人人人人插| 亚洲乱色视频一区、二区在线| 亚洲蜜臀精品视频久久| 亚洲高清无毛一区二区| 色色热| 日本 情色 1区2区3区| 国产福利一区二| 五月丁香成人网| 人妻丝袜肏逼| 八戒午夜福利理论片| 婷婷色一区| 国语精品av| 精品一二三区久久AAA片| 久久久av爱| WWW.操逼.COM| 97久久精品亚洲| 人妻熟女一区二区三区视频| 人人摸人人添人人操| 自拍欧美| 自拍偷拍草一草| 日本亚洲vr欧美不卡高清专区| 欲色综合| 亚洲欧洲综合视频在线| 欧美激情亚洲情色| 亚洲蜜乳av| 少妇内射www在线观看视频 | 97色伦欧美| 亚洲成人ab| 色色色综合网| 亚洲AV色图| www.久久| 91美女精品| 五月天婷婷色色| 国产夫妻性生活视频| 女人午夜视频777| 国产又长又大又粗的视频| 亚洲 一区二区 自拍| 久久久久久久久久久久九| 久久久久久电影| 亚洲欧美一区二区不卡视频播放| 懂色中文一区二区三区| 91性生活久久久| 免费黄色片。| 欧洲精品久久| 久久99午夜精品一区人妻| 91激情国产| 久久ww| 天天综合网91| 日韩一区二区熟女| 国产精品嫩草影院午夜两性 | 国内毛片婷婷六月色| 精品一国2| 户外裸露刺激视频第一区| 亚欧操逼片在线观看 | 国产SV一线| 91精品久久久久五月天精品| 国产精品一区二区后入| 国产1769在线| 伊香蕉综合久久久久久久噜噜噜| 天天干天天干天天干| 夜草网站| 国产精品久久久久久久免牛肉蒲团| 亚洲一级性爱视频免费看| 人妻天天爽夜夜爽2| 人人扣人人操| 亚洲性网| 亚洲男人的天堂网| 亚洲色欲天天人妻无码系列专区| 熟妇熟女一区二区三区| 欧美性爱一内片一区二区三区| 综合国产影视三级| 夜夜爽夜夜摸夜夜操免费视频| 桃色五月天| 国产丝袜欧美在线视频| 天美传媒av在线| 九九热精品| 国产又黄又粗的视频| 福利天天都操| 骚乳在线| 熟女人妻一区二区三区| 97香蕉网| 天天干1区2区在线| 四虎永久在线精品免费网址| 操逼国产免费| 天天做天天爱| 大香蕉综合在线| 玖玖视频在线资源一区二区三区| 国产强奸91| 麻豆精品.欧美精品.日韩精品.| 亚洲精品天天影视综合网 | 久久久一二三四区| 免费看污网站| 日本日皮视频逼| 欧美日韩*字幕一区| 97久久久网站| 日韩欧美偷拍美女视频| 黑丝内射一区二区三区| 熟女五十路一区二区三| 美女久久久| 91精品国| 91国产美女丝袜足交精品视频| 狠狠狠狠狠狠| 欧美大香蕉专区网| 乱性AV| 欧美偷拍| 超碰97综合网| 欧美亚州综合图片| www四虎| 色色色999| 婷婷影院入口| 国产无码精品高清| 白丝AV| 超碰久超碰久| 久久久久久裸体| A啊啊在线观看| 久久国产精品91| 婷婷色综合| 亚欧高清在线| 午夜视频好爽啊| 国产无吗在线播放| 久久久久久久久999| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 激情专区综合| 国产精品肉丝自拍| 五月激情在线| 日韩操人| 人人操人人操草草| 亚洲精品性爱片| 婷婷色色五月天福利| 国产精品另类| 大香交| 精品二区三四区五电影| 亚洲素人网| 欧美在线l亚洲| 99re在线观看| 欧美爆操91| 欧美日日夜夜| www老逼91| 白丝1区2区3区| 国内精品999| 欧美极品女人的天堂| 精品色色| 麻豆国产尤物AV| 操操AV电影| 青青草视频这里只有精品| 久久99热这里只频精品6学生| 激情五月天色色网| 婷婷五月激情综合| 国产激情久久久| www.色婷婷| 国产11页| 亚洲不卡不卡中文字幕不卡| 97中文天堂| 蜜臀亚洲中文| 五月天久久婷婷亚洲| 91精品成人| 欧洲自拍色图gif在线| 操逼无毒无码免费视频| 99热这里只有精品1|