日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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
返回資訊列表
欧美性爱第一页久久| 久久丁香五月天| 婷婷深爱五月| 2019男人的天堂| 亚洲AV噜噜狠狠网址蜜桃动漫| 久久九九国产精品| 欧美综合中文| 亞洲久久直播| 极品色电影院| 亚洲婷婷五月天| 超碰在线一区| 国产少妇高潮| 丁香五月激情婷婷| 男女猛烈无遮掩视频免费软件| 狠色婷婷久久一区二区三区_| 国产真乱mangent| 天天影视射综合网| www.欧精品| 熟女人妻精品一区二区视频| 麻豆影音天美视频| 五月婷视频| 日韩日本欧美在线观看| 国产精品视频播放| 天天射影院| a片自拍直播视频| 免费草草草草草视频| 亚洲欧美国产日本一区二区三区| 无码粉嫩白虎一线天b区| 伊人影院中文字幕| 睡产熟女乱伦| 精品日韩人妻视频| 精品九九| 色五月激情AV在线| 免费超碰97久久| 亚洲中文一区二区三区| 国产兽交视频在线播放| 999久久久免费精品国产牛牛| 人妻精品4K4K4K4K4| 五月丁香激情啪啪| 国产操逼视频在线观看| 亚洲学生妹高清av| 亚洲人精品午夜不卡| 色婷婷五月天| 熟女精品一区二区三区| 香蕉热人人精品| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产自偷自拍一区| 亚洲欧美精品国产一区二区| 巨乳特殊服务按摩| KK色在线影院| 天天亚洲| 精品一区二区2| 天天草AV| 综合网91| 在线观看无码三级少妇| JIZZJIZZ国产精品喷水| 日本欧美国内在线| 天堂九九九九九九九九九| 日本超碰在线国产一区| 人妻久久久久久久久久久久久久久| 啊啊啊啊操死我| 超碰久久.com| 五月婷婷激情| 六六久久日韩不卡| 综合啪啪| 桃色五月天| 国产原创自拍| 色女99一级片在线观看| 日本三级小说中文字幕| 色婷婷aV一区二区三区麻豆综合| 后入内射蜜桃臀| 精品九九九九九九九| 亚洲激情天堂网| 亚洲和欧美裸体美女双飞视频| 91+欧美| 日韩影片中文字幕一区二区三区| 欧洲综合视频| 欧美天堂超碰97| 国产人妻久久精品一区二区三区| 国产精品美女久久久久久网站| 99热在线播放| 少妇一区二区三区高速| 狠狠激情综合狠狠操中文字幕| 91 手机在线播放 绯色| 最新精品久久蜜桃 | 91艹| 亚洲无码电影久久久| 99色热国产视频精品| 九九国产热| 91观看 国产白丝| 免费精品中文字幕| 色色五月婷| 日韩天堂av电影在线观看| 夜夜做夜夜爽精品视频| 亚洲欧美不卡线| 精品国产丝袜一区二区三区乱码| 国产有码一区| 一本一道久久综合久久| 国内精品久久久久影院亚洲| 久久婷婷一区| 99精品网| 欧美丝袜亚洲| 亚洲一区二区中文字幕| 爱欲AV| 天美传媒AV在线| 国产人妻天天干精品| 精品无码一区二区人妻久久蜜桃| 欧美色www亚洲国产阿娇要播| 国产超碰国产97| 亚洲97精品| 亚洲最大的综合性av| 久久啊啊啊视频| 亚洲男人久久综合天堂| 高树玛利亚无码流出| 高清有码一区二区| 欲香欲色天天天综合和网| 亚洲国产91精品一区二区久久| 操操AV电影| 啊啊啊操死我| 欧美最婬乱婬爆婬性视频| 国产精品ⅴ无码大片在线看.| 精品超碰中文在线| 深夜国产福利| 99久久9| 午夜婷婷| 亚洲日韩美女中文字幕乱| 日韩无码一级黄色av片| 91在线免费观看处女| 一级成人性爱| 日韩精品人妻中文字幕不卡乱码| 少妇滛荡视频| 国产对白刺激视频| 亚州Av天美传媒| 日韩99神马视频播放片在线播放| 男人的天堂一区三区| 欧美天天| 激情小说亚洲视频| 久干网| 99色视频| 乱论91| 狠狠躁天天躁日日躁97| 高清不卡国产| 99这里有精品视频| 成年人网站在线免费观看| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 国产精品青青草| 黄色av一区二区在线| av网站国产主播在线| 91欧美少妇| 中 文字幕一区二区三四 五 区日 日 骚 | 蜜臀99久久精品| 婷婷在线视频在线观看| 欧美丰满少妇xx高潮| 国产一区二区免费福利片| 熟女日韩| 九九视品黄色| 香蕉欧美| 性爱视频免费网址| 日韩欧美aⅴ综合网站发布| 日韩乱伦视频| 97天天综合| 一级久久性爱视频| 日本不卡一区| 中文字幕欧美日本乱码一线二线| www.zbzhongsen.com| 欧美AB在线| 大乔未久88一区| 亚洲综合五月天| 1769国内精品视频| 久久风骚城市| 色哟哟-国产专区| 91成人在线免费视频| 日韩性色| 亚洲高清在线se| 人人天天欧洲| 立川理惠加勒比无码| 操逼视频国产无套| 亚洲 日本 不卡| 欧美亚州色的图| 天堂蜜桃无码视频一区二区| HEYZO高无码国产精品227| 亚洲日韩精品一区二区| 亚洲 无码 有码 中文字幕| 黄色AV影视| 人妻系列无码专区中文有码| 久久久久亚洲AV无码专区少妇| 亚洲欧洲综合| 激情婷婷黑人91| 四虎视频在线观看| 婷婷色网| 这里是精品| 人妻熟女一区在| 在线中文字幕极品av| 日韩精品资源专区二区| 色图综合网| 嗯嗯啊啊啊好爽| 日本熟妇自慰性高潮一区二区三区| 色呦呦、国产精品| 天天看片天天爽| 色婷婷影院| 精品人妻美妇91job| 美女写真| 久久久中文| 最新国产精品久久精品| 超碰人人超在线观看| 日韩卡一卡二卡三在线| 日韩性爱毛片操骚逼| 日本影视久久免费| 欧美区亚洲区偷拍区| 懂色av一区二区三区天美传媒| 久久久亚洲熟妇资源| 玖玖爱伊人玖玖爱| 人妻丝袜一区二区三区在线| 97综合在线| a片久久久久久久久久久久| 九九热AV| a片偷拍视频| 精品九九国产无码| 亚洲欧综合另类无码一区| 国产成人99久久亚洲综合| 午夜男女爽爽大片免费观看| 3d成人精品一区二区| 性爱Av免费| 亚州操逼图| 国产成人+综合亚洲+天堂| 国内毛片免费h片在线| 免费综合亚洲中文| 99热这里只有精| 日韩内射视频| 很狠操| 精品白丝一区| 中文字幕一区二区三区字幕| 嫩草影院在线观看精品| 色五月av| 97欧美色| 天天草夜夜草高潮片| 加勒比在线视频一区二区三区 | 91人妻人人妻| 亚洲视频二区 | 国产AV毛片| 久久美女福利是上海美女| 狠狠狠狠狠干| 青青草久久在线| 老熟女天天操| 亚洲熟女性高潮久久久| 九九碰九九爱97| 日本三级小说中文字幕| 天美传媒精品久久视频| 亚洲国产精品成人综合| 无码视频黄色网战| 久久久久久久久久久97| 色图四区| 操高情无码| 97香焦色区| 婷婷九月国产| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 麻豆久久视频在线地址| 亚洲中字慕不卡| 日产操逼| 欧美精品第3页| 97热视频在线观看| 高清无码在线播放网站| 国产免费一区二区三区最新不卡| 91天美传媒在线| 蜜桃久久一区二区| www.婷婷| 传媒在线观看一区二区三区| 中文字幕 国产区| 磁力99AV| 日韩性爱一级片| 色噜噜婷婷| 天美传媒Av在线| 亚洲91网| 超碰超碰95| 日韩大香蕉AV影片| 免费一级视频特黄色大片| 成人一区二区三区四区| se吧提供国产乱老熟视频胖女人| 欧美日韩国产传媒在线精品| 97色在线视频| 色狠狠综合| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 91成人在线免费视频| 91夜夜蜜桃臀1区2区3区| 久久尹人大香焦视| 天天操夜夜操| 中文字幕第2页| www.色99| 操逼操逼操| 色欧美天天| 天天亚洲| 欧美性战999| 成人小说另类在线| 久久中文色图| 伊人网青青| 91处女视频在线观看| jizz啪啪| 熟女一区二区三区| 一类无码操逼视频| 久久东京热成人| 91日本在线观看| 亚洲图片91| 一区二区偷拍拍视频| 夜夜欧美| 狠狠夜色午夜久久综合在线| 欧美性爱一级操| 中文字幕av片| 五月天婷婷影院| 丰满人妻一区二区三区四区| 超AV色女| 岛国色情视频在线观看| 在线五区| 116美女午夜| 91久久九九精品国产综合| 欧亚日韩三区| 99色婷婷| 女人与公拘交酡2020视频| 屌妞视频久久久久久久久久久久| 国产精品无码av在线 | 国产精品久久久久亚洲av| 男人的天堂无码| 色婷婷99| 欧美成人A√在线一区二区| 久久99草| 手机不卡视频不卡在线一二三区| 日韩激情中文字幕有码| 日韩欧无码一区二区三区免费不卡| 夜夜操91744565| 国产免a费看黄片在线| 久久精品无码熟妇一区二区三区视频导航 | 麻豆成人AV| 欧美色997| 久久精视频美日韩在线视频| 免费精品无码一级毛片牛牛影视| 亚洲精品一区二区免费在线观看| oumeisetu综合| 黄色AAAAAAAAAAA大片| 精品在线蜜臀| 久艹99| 高树玛利亚无码流出| 国产一级作爱毛片| A级片日韩欧美国产欧美视频精选观看| 欧美人妻中出| 久久久久久大| 日韩婷婷| 伊人影院综合是一个与深夜成人在线| 九九热AV| 天天综合官网| 综合网亚洲1| 五十路熟女工口| www.狠狠| 丁香五月激情婷婷| 国产福利av精彩对白| 在线日韩日本亚洲国产| 91性网| 2017天天透天天通天天擦| 天天综合网~69| 婷婷五月天激情四射| 欧美十八禁导航成人| 日韩三级伊人| 精品一区二区三区丰满熟女-亚洲欧美一区 | 91老司机精品| 久久久久久中文| 久久免费精品96| 色呦呦、国产精品| 青娱乐av在线| 国产精品制服丝袜中文字幕日韩一区二区三区 | 91GD.COM| av天堂手机版追回| 入口操逼网站| 国产精品自在线发布| 一级日本牲交大片好爽在线看| 亚洲91色| 农村女一级毛卡片| 少妇一区二区三区| 免费A片三p视频| 久久性爱视频免费看| 亚洲97在线观看| 国产免费内射视频| 美女久久久久久久久久久| 97超碰国产亚洲精品| 五月天亚洲网| 另类小说欧美激情校园春色| 野狼福利社区| 欧美裸体美女日麻屄| 亚洲男人电影天堂| 五月天婷婷在线看| 一区二区三区黄色片a| 欧美1区二区三区公司| 国产辣妈在线视频福利| 久久精品国产99精品亚洲蜜...| 人妻干天天| 亚欧免费| 国产亚洲精品玖玖玖在线观看| 久久性爱网站| 五月婷婷啪啪| 亚洲蜜臀懂色| 国产精品毛片| 欧美一级二级三级| 日韩黄色av中文字幕| 性久久| 超碰人人超在线观看| 99超级碰免费视频| 亚洲国产剧情少妇激情| 久久久久大香青草精品综合| 日本黄色精品| 人人操 欧美| 伊人网综合在线视频| 亚洲欧美日韩综合在线尤物 | 东北女人| 国产丁香精品露脸视频| 99婷婷一区二区| 黑人狂躁日本妞一区二区三区| 新婚人妻扶着粗大强行坐下| 91久久久久久久久久久| 欧美91丝袜| 91色插| 国产精品永久免费10000| 夜夜影视四色| 大鸡吧尹人在线| 久久久久久久久久久久欧美日| 亚春色色| 一本一道波多野毛片中文在线| 亚洲免费看片| 久久噜| 男人的天堂网页| 少妇xx精品| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日韩性爱一级片| 久久AV无码网址| 亚洲国产精品久久久久婷婷青年| 任我爽在线视频免费观看 | 男人天堂站| 中文字幕国产| 精品九九国产无码| 67194无码不卡| aV中文麻| 日本在线播放不卡一区| 久操 高清| 97在线免费看视频| 亚洲精品视频在线播放| 不卡一区视频| 久久草草亚洲蜜桃臀| 色5月婷婷| 大香蕉色欲AV| 亚洲国产成人福利在线观看| 欧美三级免费伊人| 日韩性爱长视频免费| 九九黄色视频在线观看| 亚洲黄a三级三级三级看三级| 97爱爱| 久久久久13| 国产夫妻性生活视频| 精品无码久久久久久国产浪潮| 超碰超碰95| JuliaAnn丝袜熟女系列| 日韩一区二区精品视频| 久久久999国产| 成人乱码一区二区三少妇| 热久日综合| 欧美A片中文字幕| 免費人妻夜夜爽天天爽爽一区| 女生久久网| 久久久久久午夜男人的天堂| 欧美激情1区| 六月丁香久久| 外国免费性情大片| 超碰97爽| 久久免费99精品久久久久久| 久久久久久久久久久久黄色| 国产精品4p在线观看| 日产国产精品中文久久婷婷| 日韩啊V| 亚洲天堂另类小说男人| 午夜a成v人电影| 丁香婷婷激情五月天无毒不卡 | 91高跟美女在线播放| 17c在线成人免费A片观看| 欧美成人色| 亚洲欧美自拍偷拍| 亚洲熟女少妇免费视频| 另类天堂| 欧洲黄色网| 久久久久久久久久久久久久久久9| 亚洲图片色图欧美另类| 亚洲日韩XXX| 亚洲蜜桃V妇女| 欧美热图99| 亚洲日产专区| 另类TS人妖一区二区三区| 久久m| 国产树林里野战在线看| 天天爽天天操啊啊啊| 亚州操操穴网| 玖玖爱免费观看视频| 青青五月天| 超碰国产情侣自拍网| 国产av强奸美女| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 男人的天堂久久狠| 丁香婷婷久久| 91精品人妻偷情| 天天综合网~91综合网| 九九久久99| 欧美性生活男人的天堂| 婷婷人妻激情| 91天美传媒在线观看| 在线国产探花| 国产午夜福利电影免费在线观看| 97综合久第一页| 91大神电影天堂| 很很热性爱视频| 国产性爱强奸乱伦大全| 91女优在线观看 | 午夜福利一区二区影院| 大香蕉中文网| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 色婷五月| 波多野结衣先锋影音| 啊啊啊免费视频| 蜜乳av一区二区三区四区不卡| 六六久久日韩不卡| 国模少妇一区二区三区 | 亚洲第91页| 欧美图片偷拍| 久久性爱视频| 97最新在线播放视频| 13小男生GAY自慰脱裤子| 亚洲蜜臀精品视频久久| 精品人妻一区二区三区夜夜| 四虎AV无码| 99热精品在线观看| 一区二区三区四区免费视频| 国产超碰AV在线精品| 亚洲成成熟女人综合一区二区| 使劲用力艹少妇视频一区二区| 国产高清1234区| 极品色www影院| 一牛影视成人片免费| 国产精品懂色tv影视免费观看| 亚洲一区二区av| 青草伊人久久| 99久久9| 噜噜噜久久亚洲精品色情| 国产精品乱人伊人网| 99视频内射三四| 欧美色综合影院| 国产欧美日韩精品中文| 强奸乱伦中文字幕AV| 久久五月天婷婷丁香中文字幕| 亚洲国产美女久久久久| 日韩性爱一级片| 国产一国产一级毛片古装| 91日韩国产欧美亚洲另类精盘州至城都| 久久久久久久综合,国产| 99爱爱| 狠狠躁日日躁夜夜躁A| 最新精品久久蜜桃 | 1769一区| 东北丰满熟女国产一区| 九热中文字幕| 97资源久久| 日韩99999| 大香蕉伊人75| 久操视频在线观看| 国产成久久综合片| 爽极品影院| 亚洲国产成人精品久久久国产成人一区二区三. | 男人的天堂在线2| 国产精品 午夜福利| 国产偷仑| 春色综合免费| 国产精品视频在线观看| 无遮挡男女激烈动态图| 国产精品美女在线一区| 一区在线国产播放| 性欧美另类高清| 久久久99久9| 性性久久| 日韩三级av片| 久久中文字幕不卡人妻| 亚洲精品影视老司机| www.国产高潮精品| 亚洲综合春色| 精品成人女人久久| 久操国产在线| 在线观看无码三级少妇| 一区在线国产播放| 九九久久久久久爱| 成人一级二级| 黄片www视频免费| 狠狠色狠狠色狠狠五月| 日韩三级视频一区二区三区| 啊啊啊啊二区好大| 欧美写真视频一区| 强奸乱伦AV网站| 中文字幕黑人大片| 97视频在线免费播放| 欧美色图 色综合图| 国产精品网址| 国产欧美伊人| 免费国产| 欧美性爱18观看| 久久久久久久久久8888| 亚洲欧美一区二区不卡视频播放| 91美| AA特级绝黄| 亚洲AV免费在线观看| 五月天AV资源| 国产精品一区av在线| 精品色色| 久久久九九| 人人做天天爱| 麻豆天美电影一区二区| 欧美在线亚洲| 玖玖爱免费观看视频| 欧美天堂日韩三级国产传媒| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 欧美综合狠| 麻花豆传媒剧国产MV出差| 人人天天欧洲| 美女性91| 99热99色| 漂亮人妻被强中文字幕hd| 亚洲一区二区三区中文字幕| 无码人妻丰满熟妇奶水区毛片| 中文字幕一区二区无码成人 | 久啪视频| 亚洲砖码砖专无区2023| 九九九九精品一区| 国产强奸乱伦xd| 91最新综合| 亚洲成a人v欧美综合天堂下载| 日本九九九九| 欧美日韩人妻精品系列一区二区三区| 久久久久久精品免费看A级| 亚洲欧美一区二区不卡视频播放| 13小男生GAY自慰脱裤子| 99热97| 9Ⅰ老熟女| 人妻天堂综合网| 91高潮| 亚洲色偷偷色噜噜狠狠99网| 男人精品区| 色性综合| 欧美性爽xyxOOOO| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 五月天亚洲色图| 综合色图亚洲欧美| a级免费在线观看| 日本一区二区三区欧美日韩中文字幕| 思思久热在线精品66| 国产天天骚| 亚洲AV成人无码一二三久久| 欧美亚洲AN| 中文字幕一区二区韩| 91国内外在线| 大香蕉啪啪网| 国产拍偷精品网站| 97AV在线免费观看| 亚洲精品aa久久伊人| 99re这里只有精品2| 成人情色一区二区| 亚洲国产美女久久久久| 大香蕉伊在线久草麻豆天堂故事| 一区二区三区视频国产免费| 亚洲色图第一页| 国产成人网| 国产成人亚洲精品无| 乱老熟女一区二区三区| 亚洲色图殴美色图激情乱伦| 人人妻人人爽| 白丝jkav| 午夜丁香| 欧美激情性久久久久久| 91超碰在线观看| 亚州少妇| 人摸人人操人| 欧美乱欲| 亚洲精品一区二区免费在线观看| 久久久久9| 人妻二区| 久久久久成人网| 中美日韩毛片| 五月天激情影院| 欧美成熟性爱精品| 亚洲综人| 日日骚 av| 大香蕉啪啪啪| 亚洲va有码在线天堂| 97碰碰色| 夜夜夜夜爽| 99久久无色码| 操一区| 亚洲精品尤物yw在线影院| 精品少妇高潮久久| 中文字幕天天操| 五月天社区| 美女操逼福利视频| 国内亚洲高清无码| 国产农村妇女毛片精品久久| 熟妇精品juliaannAV| 丰满人妻-区二区三区免费| 九九干| 欧美性爱精品七区| 91熟女丨91老女人| 综合性视频99| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 中出后入| 自拍欧美| 中文字幕丝袜美腿| 天天插天天插| 亚洲成av人片色午夜乱码| 国产精品成人无码a v毛片| 五十路一区无码| 精品丰满熟妇人妻一区| 亚洲伊人久久精品影院| 欧美97日韩| 国产女上位好爽在线| 超碰99热| 操美女高潮抽搐白浆| 福利视频一区二区微拍| 亚洲天天做日日做天天谢日日| 91老熟女视频| 亚洲人天堂| 亚洲欧美骚| 91色欧美| 伊人九九| 亚洲熟女人妻中文字幕一区二区| 亚洲成人在线资源| 久久网亚洲| AV色五月天| 国产女人9999| 亚洲青青草| 国产欧美黑人丰满在线| 色婷婷久久综合超碰| 成人热久久精品| 亚洲AV不卡在线观看尤物| 天天看人人操屄犊摸阴| 久久偷拍人| 日韩精品操少妇| 精品国产国产AV| 亚洲色情在线影视| 97精品中文字幕| 午夜无码熟妇丰满人妻| 亚洲极品| 91女日逼| 91夜色| 久久久久亚洲三级电影| 欧美日韩电影成人在线| 狠狠色狠狠色狠狠五月| 一级啊性爱在线视频| 综合五月婷婷| 人妻啊啊人妻啊啊| 欧美色九九九| 伊人久久亚洲中文字幕不卡| 天天草AV| 午夜男人的天堂| 亚州熟女乱伦| 自拍视频一区在线观看| 在线国产探花| 德国一二三不卡| 啊啊啊好大好湿| 97久久久久久久久久| 91精品久久久久| 欧美亚洲自拍另类人妻| 中文字幕乱在线伦视频中文字幕乱码在线 | 不卡免费av在线播放| 久久久无码国精品无码三区三区| 18一区二区三区| 裸体美女久久久| 成人区人妻精品一| 日韩激情电影中文字幕| 色久桃花影院在线观看| 色播五月丁香| 麻豆激情综合| 久久97精品久久久久久久不卡| 白丝被操91| 强免费黄色网址| 99国产精品在线观看| 91碰碰| 试看日韩黄片| 日本午夜精品理论片A级APP发布| 啊啊啊 在线观看| 美女网站黄页| 国产精品内射婷婷一级二| 日本色色色视频| 福利风月五月天影院| 97在线亚洲| 影音先锋乱伦资源| 久久精品国产精品亚洲艾通辽熟妇 | 国产女人成人精品视频| 日日干夜夜操视频h| 欧美日韩人妻精品一区二区三区| 欧洲黄色网| 丁香五月天激情综合| 97色涩| 国产视频人人网| 久久激情综合| 加勒比伊人综合| 欧美高清18A片| 91黑丝在线播放| 性九九九九九九| 色y情视频免费看| oumeisetu综合| 999久久久久久久久| 乱伦a片视频| 视频在线观看一二三区| 97欧美日韩综合| 天天日B夜夜干B时时操B| 亚洲精品欧洲精品| 91美女在线观看| 婷婷久热| 亚洲日韩资源| 亚洲强奸乱伦影视网| 色天堂综合| 女欧美一区二三区| 久久综合18p| 国产精品欧美在线观看 | 日韩在线观看AV| 思思热影视| 精品一区二区三区四区外站| 欧美爱三级日韩久久| 天天操av懂色| 屁股久久久久久| 伊人网av| 久久精品店| 日韩啪啪啪啪啪| 欧美性夜| 日韩有码免费视频| 久草在线| 麻豆区99999| 色欲天天婬色婬香WWW夜色| 欧美制服另类丝袜| 97超碰欧美| 国产最新AV| 婷婷久久五月综合激情| 老熟女91av| 国产欧美在线观看免费观看| 91青视频| 97超碰磁| 亚洲日产专区婷婷| 欧美黑人精品一区二区| 久久熟女嫩草成人片免费 | 色娱乐色呦呦夜夜夜夜av| 成人a级高清视频在线观看| 天美精品一区二区三区四区在线观看| 一区二区三区亚洲| 玖玖草久草99蜜月一区二区三区| 国产精品探花在线| 精品国产乱码久久久久久久久久毛片| 亚洲中文字幕网| 91 丝袜在线播放| 色诱中文字幕| 日韩色欲久久一二三四区| 久久久内射良家| 亚洲第一综合| jizz啪啪| 欧美最大综合网| 大香蕉九九| 亚洲视频中文一区| 青木玲在线不卡| 日韩性爱视频免费在线| 国产99热| 狠狠色一区二区中文字幕| 性爱精品一区| 亚洲综合九九| 91精品婷婷国产综合久久竹菊| 成人免费福利在线观看| 啪啪啪亚欧美视频| 青青草大香蕉在线视频| 人人摸人人叼| 91狠狠综合| 97视频在线免费播放| a久久| 尤物视频一区| 日韩91网站| 淫乱图区 | 中文三一区| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| aaaa少妇高潮大片| 天天澡天天爽日日AV| 蜜臀亚洲综合一二三四区| 大香蕉婷婷| 天天色黄色影院天天操| 欧美 亚洲 在线| 怡红院成人av| 97超碰69| www久| 免费精品人妻一区二区三| 熟妇色99| 欧美精品亚洲精品日韩传电影| 爱射综合| 色色色999| 国产51色综合久久免费| 男人天堂欧美| 亚洲伊人青青草| 做爱福利视频一区二区| 吻戏激情性巴克| 精品伊人久久久大香线蕉小说| 视频一区二区免费在线| 日曰骚久久精品| 日韩精品电影| 一及黄久一点| baisiav| 五月天激情四射| 亚洲中文国际强奸字幕| 黄片免费视频2019| 亚洲情欲| 超碰97国产欧美| 亚洲91射| 亚洲熟妇综合久久久久久| 青草香蕉网| 欧美性爱一内片一区二区三区| 六月色色| 超碰免费人人| 秋霞欧美性爰视频| 久久成人国产| 久久无码成人| 97在线精品观看视频| 无码一区免费在线不卡| 神马久久午夜| 久久久精品网| 麻豆精品.欧美精品.日韩精品.| 国产亚热在线久久| 97久久天天综合色天天综合色电影| 欧美另类自拍| 亚州 综合 色图| 二级久久网| 国产美女激情| 中文幕97| 色偷综合| 久久久久人| 午夜福利一区二区三区四区五区色婷婷| 一区二区视频你懂的| 久草热制服丝袜在线观看| 人人超碰在线观看黄| 天天看特黄的免费网站| 亚洲揄拍网| 天天澡天天爽日日av| 九九九九精品一区| 白丝在线一区| 青青草一区二区三区四| 久久一二三四五六七八九区| 欧美人妻熟女在线| 东北女人性交| 欧洲综合色图| 国产辣妈在线视频福利| 亚洲精品国产日韩无码AV永久免| 亚洲天天做日日做天天谢日日| 国产一级内射无挡观看| 操逼啊啊啊91| 激情四射五月天| 性色一线| 亚洲美女色图| 欧美专区17页| 美女久久久| 国内精品a| 自拍偷拍2025在线观看| 欧美亚洲丝袜人妻制服99| 日本久操视频| 欧美天堂超碰97| 国产精品午夜福利| aV中亚| 91人妻中文| 日日干夜夜干| 91夜夜蜜桃臀1区2区3区| 欧洲大香蕉| 精品国产AV一区天美传媒| 亚洲性爱成人| 爱做久久久久久| 毛片视频白嫩| 一区二区三区色综合| 天天影视91看看| 日韩免费中文字幕视频| 99精品视频在线观看免费| 大香网伊人久久综合| 成人网欧美风情| 五月天亚洲网| 亚洲av性爱电影| 入口操逼网站| 天天天肏屄欧美| 99精品无码| 中国操逼无码| 综合啪啪| 中国小夫妻勾搭露脸淫荡对白| 99热欧美| 中文字幕中文字幕一区二区| 天天爽天天操| 久久精品国产久精国产| 放黄片放3级黄片没穿衣服| 国产区91柔拿会所技师| 麻豆蜜桃视频在线观看| 蜜臀久久99'精品久久久| 久久久久亚洲| 婷婷久久五月| 日韩精品人妻中文字有码在线| 校园春色五月天| 在线精品福利免费播放| 青青草视频久久久久| 久九九九九九九九热| 久久一区二区高清免费| 97精品一二区| 日本三级精品| 亚洲成熟国产精品美女| 一区二区三区四区姦女| 97chaopengongkai| 18禁超污无遮挡无码免费网| 大香蕉国产中文自拍| 免费一二区| 亚洲午夜AV| 久久色AV线| 1人人看人人摸人人操| 人妻久热在线| 啊啊啊啊啊好多水| 色婷五月| 干美女人妻| 97人人操人人摸人人爱| 日韩9999| 男女猛烈无遮掩视频免费软件| 精品国产乱码久久久久久久久1| 东京热伊久| 国产精品无码在线| 日韩少妇在线视频| 中国少妇XXXX做受| 天天享受天天看| 内射小黄片| 日逼五月天| 第四色奇米影视777| 色哟哟-国产专区| 国产高清自拍视频| 久久久工口| av三级电影在线播放| 国产黄a三级三级三级av在线看| 亚洲欧美清纯| 亚洲熟妇极品| 九九九色| 精品久久99| 婷婷色色五月天福利| 日韩AV中文字幕电影| 亚洲男人综合| 国产AV天美| 男人天堂黄片| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲AV永久无码一区仙野| 疯操AV| 五月婷婷综合网| 午夜爽爽爽| 九一综合精品视品av| 国产精品嫩草影院午夜两性| 69人妻精品丰满熟女区| 性爱视频无打码在线观看| 色超碰综合| 午夜福利视频在线一区| 97精品全部| 91天天日| 韩国一级婬片A片无码天美| 超碰天天操| 亚洲熟女中文字幕在线| 日韩一卡二卡三卡| 久久25| 操逼视频亚洲| 91免费看中出视频| 奸色色 男人天堂 天天射| 日韩欧洲操屄视频| 97超碰这里只有精品| 色情五月丁香| 日韩少妇无码| 人妻酒店出差被中出免费在线播放| 欧美十八禁导航成人| 日韩无码第3页| 超碰97资源中文字幕| 亚洲 自拍偷拍 欧美| 大香蕉一人| www.四虎在线| 日韩探花精品在线视频| 精品久久97观看在线视频| 色老汉色| 日本道久久综合色色| 久久69| A一级色女| 国产在线76页| 亚洲毛片一级带毛片基地| 国产精品9999| 亚洲熟女一区| 鲁鲁色综合网| 亚洲啪啪视频一区二区| 欧美综合亚洲综合| 色亚州人久干视频在线观看免费版| 天天日天天舔| 国产精品无码av| 九九热AV| 骚鸭AV| 久久免费精品96| 亚洲一区深夜| 人妻日日干| 蜜乳中文字幕a在线| 丝袜美腿丝袜| 小明看看网址| 91狠狠综合久久久久久| 人人干人人操人人..com| 中英熟女操女| 久热伊人| 亚洲青青草| 夜夜久久| 色av中文字| 色婷网| 亚洲中文日韩欧美大香蕉视频| 国产又粗又大硬免费色网视频| 91久久精品美女高潮喷水| 加勒比综合九九99视频在线播放| 五月天婷婷小说| 亚洲二区精品在线观看| 亚洲日本激情| 亚洲天天综合| 国产精品农村妇女| 高清孕妇孕交 交孕妇| 玖玖爱一区在线| 色女网日韩| 天天综合~91入口| 日本一级一级一级一级| 操逼网站视频漫画国产| 丰满人妻无码一区二区三区| a男人的天堂久久一级A毛片| 78操B| 97超级久久| 欧美色亚洲色| 少妇久久久免费| 97精品久久久久中文字幕| 黄呦呦在线| 男生女生啊啊啊啊| 99少妇精品视频| 欧美色图亚洲特色| 啊啊啊啊啊啊啊国| 亚洲骚女一区二区三区| 午夜人妻精品综合在线| 91一起操| 激情五月丁香五月| 黄色av一区二区在线| 久草福利在线资源站| 日韩性爱电影一区| 中日韩熟女| A片 AV一级在线播放观看免费| 成人美女av| 日韩乱伦视频| 成人国产精品三级A片| 国产精选三级在线观看| 人妻熟女av国产网站| 天天色综合天天操| 久久婷婷精品| 久久国产三区| 欧美人妻二区三区| 大吊色| 欧美日韩婷婷中文| 风骚少妇视频中文字幕| 九99久久| 91 天天综合| 男女啪啪网站免费视频| AV乱伦专区| 免费看黄视频亚洲网站|