久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

libwebsockets多協(xié)議同端口實戰(zhàn):HTTP與WebSocket共存機(jī)制解析

libwebsockets多協(xié)議同端口實戰(zhàn):HTTP與WebSocket共存機(jī)制解析 libwebsockets我習(xí)慣直接叫它lws最容易被新手忽略的一點是它從來不是一個只能跑WebSocket協(xié)議的庫。它默認(rèn)就支持一個進(jìn)程、一個監(jiān)聽端口上同時掛多套協(xié)議HTTP、WebSocket、甚至H2而且每套協(xié)議都有自己獨(dú)立的狀態(tài)存儲、回調(diào)入口和生命周期管理。這就是標(biāo)題里說的“多協(xié)議工作”。如果你之前只是照著demo把WebSocket跑起來遇到“又要提供REST接口、又要做實時推送、還想順手把靜態(tài)頁面也發(fā)出去”的需求第一反應(yīng)可能是去外面分別起兩個服務(wù)再在前面套一層Nginx。但你完全可以只用一個lws進(jìn)程把所有流量收口在一個端口上。這篇文章我就把lws的多協(xié)議機(jī)制從數(shù)據(jù)結(jié)構(gòu)、回調(diào)分發(fā)到實際編碼完整捋一遍適合正在折騰C語言網(wǎng)絡(luò)服務(wù)、或者想把服務(wù)端部署結(jié)構(gòu)做簡單的開發(fā)者看。1. 先搞明白libwebsockets的多協(xié)議到底“多”的是什么1.1 三個層次context、vhost 與 wsi想理解lws的多協(xié)議得先接受它分層的抽象模型。最頂層是lws_context它是一個全局的服務(wù)實例負(fù)責(zé)管理事件循環(huán)、TLS配置、內(nèi)存池和所有監(jiān)聽套接字。一個進(jìn)程一般只創(chuàng)建一個context。中間層是lws_vhost每個vhost可以理解為“一組監(jiān)聽配置 一組協(xié)議表”它可以綁定一個端口也可以和其他vhost共享同一個端口。最底層是lws_wsi它對應(yīng)一個已經(jīng)建立的連接無論是HTTP請求連接還是WebSocket全雙工連接。多協(xié)議體現(xiàn)在兩個地方一是同一個vhost上可以注冊多個struct lws_protocols這是最直接的多協(xié)議二是同一個context下可以掛多個vhost每個vhost有獨(dú)立的端口和協(xié)議表。兩者疊加你就能在一個進(jìn)程里同時提供“80端口HTTPWebSocket混合服務(wù)”和“443端口HTTPS服務(wù)”而不用拆成多個進(jìn)程。我自己的理解是lws把“協(xié)議”定義為“回調(diào)函數(shù) 會話數(shù)據(jù)格式 接收緩沖區(qū)大小”的組合而不是傳統(tǒng)意義上寫死在代碼里的協(xié)議棧。它通過事件驅(qū)動把所有連接上的數(shù)據(jù)先吃進(jìn)來再根據(jù)連接屬于哪個協(xié)議把數(shù)據(jù)交給你注冊的回調(diào)去處理。1.2 為什么現(xiàn)實中需要多協(xié)議并存單協(xié)議服務(wù)的痛點是拆服務(wù)。比如你做一款I(lǐng)oT設(shè)備管理后臺設(shè)備端需要長連接接收指令Web端需要REST API查詢設(shè)備狀態(tài)前端頁面還得有人發(fā)出靜態(tài)HTML。傳統(tǒng)做法是設(shè)備連接走一個MQTT或自定義TCP服務(wù)REST走Spring Boot靜態(tài)頁面交給Nginx。三個服務(wù)、三個端口、三套部署、三份日志運(yùn)維成本全堆在這。lws的思路是把這些流量統(tǒng)一到一張協(xié)議表里。設(shè)備連接走注冊好的某個WebSocket子協(xié)議REST請求走HTTP協(xié)議回調(diào)靜態(tài)頁面由HTTP協(xié)議內(nèi)部路由。所有連接都在同一個事件循環(huán)里跑所有資源都在同一個進(jìn)程內(nèi)部分配調(diào)試的時候抓一個端口的包就夠了。還有個容易被忽略的場景升級平滑期。你想把老客戶端的HTTP輪詢改成WebSocket推送但是不能一刀切下線HTTP接口。多協(xié)議并存可以讓你在同一個端口上同時保留兩條通道老的繼續(xù)走REST新的走WS等服務(wù)端數(shù)據(jù)統(tǒng)計確認(rèn)遷移比例后再關(guān)掉舊通道。1.3 單端口部署帶來的實際收益有一個非?,F(xiàn)實的收益是TLS證書。如果拆成多個服務(wù)每個HTTPS入口都要單獨(dú)配證書、處理證書續(xù)期。而lws把所有監(jiān)聽都收口在同一個context里TLS證書只加載一次握手邏輯統(tǒng)一走一套。第二個收益是防火墻和端口管理。物聯(lián)網(wǎng)設(shè)備部署在客戶現(xiàn)場網(wǎng)管只給你開一個端口的情況非常常見。多協(xié)議合流后80或443一個端口就能同時承擔(dān)設(shè)備長連接、控制命令下發(fā)、固件下載、狀態(tài)查詢這些所有工作不用去跟客戶IT部門反復(fù)磨端口。第三個收益是內(nèi)存和線程的資源復(fù)用。lws默認(rèn)是單線程事件循環(huán)連接多起來之后不需要像多線程模型那樣為每個連接分配線程棧。協(xié)議再多共享的還是同一套內(nèi)存池和poll循環(huán)。這一點在資源受限的嵌入式環(huán)境里尤其值錢。2. 核心機(jī)制拆解protocols數(shù)組、回調(diào)與事件循環(huán)2.1 struct lws_protocols 的字段到底在控什么多協(xié)議最終都會落到一個struct lws_protocols數(shù)組數(shù)組里每一項定義一套協(xié)議。這個結(jié)構(gòu)體的核心字段如下struct lws_protocols { const char *name; /* 協(xié)議名字用于子協(xié)議匹配 */ lws_callback_function *callback; /* 該協(xié)議的回調(diào)函數(shù) */ size_t per_session_data_size; /* 每個連接私有數(shù)據(jù)的字節(jié)數(shù) */ size_t rx_buffer_size; /* 接收緩沖區(qū)大小 */ unsigned int id; /* 自定義id方便區(qū)分是哪個協(xié)議 */ void *user; /* 協(xié)議級共享數(shù)據(jù)指針 */ size_t tx_packet_size; /* 發(fā)送分片大小一般為0用默認(rèn)值 */ unsigned int pkt_sequential; /* 是否順序處理發(fā)送包 */ };name字段不只是給人看的。WebSocket握手時客戶端請求頭可以帶Sec-WebSocket-Protocol服務(wù)端就是拿它跟數(shù)組里的name逐個做字符串匹配。callback不用多解釋協(xié)議所有事件都會進(jìn)這個函數(shù)。per_session_data_size是關(guān)鍵lws每接收一個新連接就會按這個大小給連接分配一塊獨(dú)立內(nèi)存然后把這塊內(nèi)存的首地址通過回調(diào)函數(shù)的user參數(shù)傳給你。這相當(dāng)于框架幫你做了會話隔離。rx_buffer_size決定lws從內(nèi)核讀數(shù)據(jù)時緩沖區(qū)的上限。如果業(yè)務(wù)消息很大這里設(shè)小了會觸發(fā)分塊回調(diào)增加協(xié)議處理復(fù)雜度。我一般習(xí)慣直接設(shè)成業(yè)務(wù)最大消息尺寸比如聊天服務(wù)設(shè)成4096或8192。2.2 回調(diào)是什么時候、被誰調(diào)用的lws內(nèi)部維護(hù)一個poll循環(huán)典型代碼就是while (lws_service(context, 50) 0);lws_service會等待并處理所有已注冊的fd。每當(dāng)某個連接上有數(shù)據(jù)可讀、可寫或者關(guān)閉事件lws會根據(jù)這個連接保存在wsi里的協(xié)議指針找到對應(yīng)的回調(diào)函數(shù)和會話數(shù)據(jù)然后調(diào)用int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len);reason是回調(diào)原因枚舉常見的有LWS_CALLBACK_ESTABLISHED連接建立、LWS_CALLBACK_RECEIVE收到數(shù)據(jù)、LWS_CALLBACK_SERVER_WRITEABLE可以寫數(shù)據(jù)了、LWS_CALLBACK_CLOSED連接關(guān)閉。你不需要自己在業(yè)務(wù)代碼里管理fd事件框架把“什么時候調(diào)”這件事全部接管了。這里有一個對多協(xié)議極其重要的結(jié)論不管注冊了多少個協(xié)議回調(diào)都跑在同一個線程里、同一個循環(huán)里。這是好事因為你的業(yè)務(wù)邏輯天然不需要加鎖。但也意味著任何一個回調(diào)里出現(xiàn)了阻塞操作比如sleep(1)、或者做數(shù)據(jù)庫同步查詢整個服務(wù)的所有協(xié)議都會被拖慢。我見過一個同事在WS收到設(shè)備數(shù)據(jù)后直接同步發(fā)了一個HTTP請求去別的服務(wù)結(jié)果所有在線設(shè)備都開始延遲排查了半天。2.3 多協(xié)議在握手階段怎么定位HTTP升級與子協(xié)議協(xié)商客戶端訪問一個地址第一個請求往往是HTTP。lws內(nèi)部先按HTTP協(xié)議解析請求頭然后根據(jù)請求頭里的字段決定把這連接交給哪套邏輯。如果是一個普通HTTP請求連接保持HTTP角色事件進(jìn)HTTP協(xié)議回調(diào)。如果客戶端請求頭里有Upgrade: websocket、Connection: Upgrade和Sec-WebSocket-Protocollws就會進(jìn)入WebSocket角色的升級流程。這個流程里最重要的匹配邏輯是子協(xié)議協(xié)商。舉個例子??蛻舳税l(fā)來GET /ws/chat HTTP/1.1 Host: 192.168.1.10:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: xxxxx Sec-WebSocket-Version: 13 Sec-WebSocket-Protocol: chat-wslws在protocols數(shù)組里找name等于chat-ws的項。找到了就把連接掛到這個協(xié)議下回給客戶端HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Protocol: chat-ws從這一刻起這個連接上后續(xù)的數(shù)據(jù)收發(fā)都只走chat-ws協(xié)議的回調(diào)。沒找到匹配項lws默認(rèn)會拒絕升級返回握手失敗。如果你的協(xié)議數(shù)組第一個是HTTP協(xié)議而客戶端恰好沒帶子協(xié)議連接就會落入HTTP協(xié)議作為普通請求處理。2.4 一句話總結(jié)協(xié)議選擇規(guī)則規(guī)則的底層邏輯其實很簡單協(xié)議是按“連接”綁定的不是按數(shù)據(jù)包綁定的。一個連接一旦經(jīng)過握手確定了協(xié)議后續(xù)所有包都是同一協(xié)議。多協(xié)議維護(hù)的本質(zhì)是維護(hù)一張“名字到回調(diào)集合”的映射表lws在握手階段查表在后續(xù)事件里查表查到的回調(diào)只管處理這個連接。搞清楚這條主線后面看代碼就會很順。3. 實操復(fù)現(xiàn)寫一個HTTPWebSocket靜態(tài)頁面的多協(xié)議服務(wù)3.1 設(shè)計一個混合接入的業(yè)務(wù)場景這次我把目標(biāo)定得具體一點用一個lws進(jìn)程監(jiān)聽8080端口對外提供三類服務(wù)。第一是REST接口客戶端GET /api/status時返回一段JSON比如當(dāng)前在線設(shè)備數(shù)。第二是WebSocket通道客戶端連接/ws/chat服務(wù)端收到任意文本消息后向所有在線客戶端廣播。第三是靜態(tài)頁面訪問GET /時返回一個最簡單的HTML頁面頁面上用WebSocket連接聊天通道。這三個服務(wù)分別對應(yīng)HTTP協(xié)議、WS協(xié)議但WS和頁面消費(fèi)的是同一個業(yè)務(wù)域。這個場景很典型直接把一個雛形的管理后臺/聊天室/設(shè)備監(jiān)控面板串起來了。3.2 依賴準(zhǔn)備和工程結(jié)構(gòu)環(huán)境準(zhǔn)備不用太復(fù)雜。Ubuntu系統(tǒng)上直接裝庫sudo apt-get install libwebsockets-dev自己編譯的話從官網(wǎng)拉源碼后cmake一把就能過。代碼文件就一個main.c編譯命令gcc -o multi_proto main.c -lwebsockets需要注意頭文件路徑老版本可能是libwebsockets.h新版通常在/usr/include/libwebsockets.h。3.3 完整代碼實現(xiàn)與關(guān)鍵行解讀下面是核心代碼我按模塊拆開講。首先是協(xié)議回調(diào)先寫HTTP協(xié)議回調(diào)#include libwebsockets.h #include string.h #include stdio.h static int client_fds[64]; static int client_count 0; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { char uri[128]; switch (reason) { case LWS_CALLBACK_HTTP: lws_hdr_copy(wsi, uri, sizeof(uri), WSI_TOKEN_GET_URI); if (strcmp(uri, /api/status) 0) { unsigned char buf[LWS_PRE 128]; const char *body {\online\:\12\}; int n sprintf((char *)buf LWS_PRE, HTTP/1.1 200 OK\r\n Content-Type: application/json\r\n Content-Length: %d\r\n \r\n%s, (int)strlen(body), body); lws_write(wsi, buf LWS_PRE, n, LWS_WRITE_HTTP); return 0; } /* 簡單處理靜態(tài)頁面 */ if (strcmp(uri, /) 0) { static const char html[] htmlbody h1lws multi-protocol/h1 /body/html; unsigned char buf[LWS_PRE 512]; int n sprintf((char *)buf LWS_PRE, HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n Content-Length: %d\r\n \r\n%s, (int)strlen(html), html); lws_write(wsi, buf LWS_PRE, n, LWS_WRITE_HTTP); return 0; } return -1; default: break; } return 0; }這里是LWS_CALLBACK_HTTP這個reasonlws在解析完HTTP頭之后會觸發(fā)它。lws_hdr_copy是取請求URI的標(biāo)準(zhǔn)辦法很多人第一次寫lws HTTP服務(wù)都在這里卡住總想從in參數(shù)里拿URI其實URI要從header token里取。接著是WebSocket協(xié)議回調(diào)static int callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { (void)user; switch (reason) { case LWS_CALLBACK_ESTABLISHED: if (client_count 64) client_fds[client_count] lws_get_socket_fd(wsi); break; case LWS_CALLBACK_RECEIVE: /* 收到消息向所有在線ws客戶端廣播 */ for (int i 0; i client_count; i) { struct lws *target lws_get_peer_wsi(wsi); /* 簡化真實場景應(yīng)保存wsi */ } /* 強(qiáng)制所有客戶端可寫延遲到writeable回調(diào)里發(fā)送 */ for (int i 0; i client_count; i) { /* 需要一個保存lws指針的靜態(tài)數(shù)組我這里先展示思路 */ } break; case LWS_CALLBACK_CLOSED: /* 移除斷開連接 */ break; default: break; } return 0; }上面這段我故意留了簡化痕跡真實項目里不能只存socket fd因為lws的wsi才是操作句柄。正確的做法是保存struct lws *指針數(shù)組然后在writeable回調(diào)中發(fā)送。但這行代碼主要是讓你看清協(xié)議回調(diào)的骨架。我下面給一個能真正運(yùn)行的正確版本思路在ESTABLISHED里把wsi指針存進(jìn)靜態(tài)數(shù)組在RECEIVE里逐一對每個wsi調(diào)用lws_callback_on_writable然后在LWS_CALLBACK_SERVER_WRITEABLE里用lws_write把緩存的數(shù)據(jù)發(fā)出去。協(xié)議表和主函數(shù)static struct lws_protocols protocols[] { { http, callback_http, sizeof(void *), 4096, 0, NULL, 0 }, { chat-ws, callback_ws, sizeof(void *), 4096, 0, NULL, 0 }, { NULL, NULL, 0, 0, 0, NULL, 0 } }; int main(void) { struct lws_context_creation_info info; memset(info, 0, sizeof(info)); info.port 8080; info.protocols protocols; info.gid -1; info.uid -1; struct lws_context *context lws_create_context(info); if (!context) { fprintf(stderr, create context failed\n); return 1; } while (lws_service(context, 50) 0); lws_context_destroy(context); return 0; }協(xié)議表最后一項必須是空的{ NULL, NULL, 0, 0, 0, NULL, 0 }這是結(jié)束標(biāo)記漏了會崩。兩個協(xié)議掛在同一個vhost下這也是多協(xié)議最基礎(chǔ)的使用姿勢。3.4 編譯、啟動和驗證代碼保存好之后直接編譯運(yùn)行然后分三路驗證。HTTP驗證curl http://127.0.0.1:8080/api/status能看到{online:12}說明HTTP協(xié)議回調(diào)生效。WebSocket驗證我推薦用websocat或wscatwscat -c ws://127.0.0.1:8080/ws/chat --header Sec-WebSocket-Protocol: chat-ws連上之后再開一個終端同樣連接在任一端輸入字符串看另一端是否收到。如果收到說明子協(xié)議協(xié)商成功WS協(xié)議的回調(diào)正確觸發(fā)。靜態(tài)頁面驗證curl http://127.0.0.1:8080/返回HTML就說明HTTP協(xié)議里的URI路由也正常工作。你可以在瀏覽器里打開這個頁面然后看控制臺能不能建立WS連接這樣三類服務(wù)就在一個端口上完成了合流。3.5 還不夠的話多個vhost與多端口有時候同一套協(xié)議不能滿足兩個業(yè)務(wù)域的需求比如一個進(jìn)程既要給內(nèi)部管理端提供HTTP接口又要給外部設(shè)備提供長連接兩邊鑒權(quán)邏輯完全不一樣。這時可以在同一個context下創(chuàng)建多個vhost。API大致是這樣struct lws_context_creation_info info; memset(info, 0, sizeof(info)); info.port 8080; info.protocols internal_protocols; context lws_create_context(info); struct lws_vhost *vhost2 lws_create_vhost(context, info2);info2里設(shè)置port 8081、protocols device_protocols。這樣一個進(jìn)程監(jiān)聽兩個端口兩套協(xié)議表互相隔離但共享同一個事件循環(huán)和TLS配置參數(shù)。實際部署里這種手法常用于區(qū)分內(nèi)部流量和外部流量。4. 多協(xié)議協(xié)作的三個關(guān)鍵細(xì)節(jié)數(shù)據(jù)隔離、共享與切換4.1 per_session_data_size 是協(xié)議隔離的基石很多新手看到回調(diào)函數(shù)里的user參數(shù)會一頭霧水。其實它就是每個連接獨(dú)立分配的那塊會話內(nèi)存的首地址。lws在為某個連接初始化協(xié)議時會根據(jù)該協(xié)議的per_session_data_size值分配內(nèi)存。如果你在HTTP協(xié)議里寫struct http_session { char client_ip[48]; int request_count; };然后在protocols數(shù)組里對應(yīng)寫sizeof(struct http_session)那么每個HTTP連接都自動擁有獨(dú)立的http_session實例?;卣{(diào)里你可以安全地把user強(qiáng)轉(zhuǎn)成struct http_session *。WS協(xié)議也可以有完全不同的結(jié)構(gòu)struct ws_session { char username[32]; int room_id; int last_ping; };兩者的會話數(shù)據(jù)結(jié)構(gòu)完全不同但因為協(xié)議表把它們分開了lws為每個連接分配的內(nèi)存類型也就互不干擾。多協(xié)議并存的代碼不會因為數(shù)據(jù)格式不同而互相踩內(nèi)存。這是整個多協(xié)議設(shè)計里最核心的隔離機(jī)制。但要注意user指針在你自己的回調(diào)里不代表“線程安全”。lws默認(rèn)單線程所以沒有問題如果你自己又開了額外的線程去操作這些會話內(nèi)存那還是需要加鎖。4.2 協(xié)議之間共享數(shù)據(jù)的常見套路協(xié)議之間不是完全隔絕的。比如REST接口要查詢當(dāng)前在線設(shè)備數(shù)而這個數(shù)據(jù)是在WS協(xié)議那邊維護(hù)的。怎么做最簡單的辦法是用全局變量或者一個全局結(jié)構(gòu)體。由于lws默認(rèn)單線程你在HTTP回調(diào)里讀、在WS回調(diào)里寫只要都在lws線程內(nèi)就不會有并發(fā)問題。這個共享結(jié)構(gòu)可以是一個計數(shù)器、一個消息隊列、甚至一個訂閱列表。實際項目中更推薦把共享數(shù)據(jù)掛在context級別。創(chuàng)建context時設(shè)置info.user字段回調(diào)里通過lws_context_user(lws_get_context(wsi))拿回來這樣不用全局變量一個進(jìn)程多套實例也不會串?dāng)?shù)據(jù)。4.3 需要切換協(xié)議lws_set_wsi_protocol有一種場景是連接先以HTTP角色進(jìn)來完成某些鑒權(quán)動作后服務(wù)端希望把這個連接升級成自定義的數(shù)據(jù)協(xié)議。lws提供lws_set_wsi_protocol(wsi, target_protocol)可以做協(xié)議切換但要注意切換后的回調(diào)生命周期管理它會觸發(fā)舊協(xié)議的關(guān)閉流程同時初始化新協(xié)議的會話數(shù)據(jù)。不過必須提醒這種動態(tài)切換不能跟WebSocket握手升級混為一談。WebSocket握手升級用的是HTTP Upgrade機(jī)制一般不在業(yè)務(wù)代碼里手動調(diào)用而lws_set_wsi_protocol多用于運(yùn)行過程中為連接動態(tài)換綁協(xié)議。我實際使用中的體會是能通過握手階段把協(xié)議定好就別拖到運(yùn)行中再換換協(xié)議牽扯的邊界情況很多比如接收緩沖區(qū)里殘留的數(shù)據(jù)、TLS狀態(tài)下重新協(xié)商的時序處理不好容易留下隱蔽bug。4.4 寫回數(shù)據(jù)的正確姿勢多協(xié)議服務(wù)里跨協(xié)議推送最容易寫錯。很多初學(xué)者在HTTP回調(diào)里拿到一條請求想立刻向所有WS連接發(fā)消息就嘗試直接遍歷WS連接并調(diào)用lws_write。這在lws里是不安全的因為在當(dāng)前回調(diào)流程里目標(biāo)wsi可能正處于不可寫狀態(tài)。正確姿勢是先把數(shù)據(jù)存到共享區(qū)然后對目標(biāo)wsi調(diào)用lws_callback_on_writable(wsi)把“可寫”事件掛到事件循環(huán)上。等lws服務(wù)到這個wsi時會觸發(fā)目標(biāo)協(xié)議的LWS_CALLBACK_SERVER_WRITEABLE回調(diào)你在這個回調(diào)里統(tǒng)一lws_write。這套機(jī)制的好處是發(fā)數(shù)據(jù)這個動作永遠(yuǎn)發(fā)生在目標(biāo)wsi自己的協(xié)議上下文里不會跨協(xié)議直接操作對方內(nèi)部狀態(tài)。5. 實戰(zhàn)中容易踩的五個坑以及排查思路5.1 問題速查表現(xiàn)象常見原因解決思路所有連接周期性卡頓某個協(xié)議回調(diào)里有阻塞操作檢查回調(diào)里有沒有sleep、同步鎖、同步網(wǎng)絡(luò)請求WebSocket握手總是失敗protocols數(shù)組里沒有匹配的子協(xié)議名確認(rèn)客戶端Sec-WebSocket-Protocol與數(shù)組name完全一致收到數(shù)據(jù)不完整rx_buffer_size小于單次業(yè)務(wù)包調(diào)大rx_buffer_size或用LWS_CALLBACK_RECEIVE分幀邏輯重組兩個協(xié)議互相串?dāng)?shù)據(jù)per_session_data_size設(shè)置錯誤確認(rèn)每個協(xié)議的會話結(jié)構(gòu)體大小正確回調(diào)里強(qiáng)轉(zhuǎn)類型要對應(yīng)新協(xié)議加入后行為異常協(xié)議表順序或結(jié)束標(biāo)記問題保留最后的空協(xié)議項檢查第一個非空協(xié)議是否被誤設(shè)為默認(rèn)協(xié)議5.2 日志與抓包的排查配合lws自身日志非常詳細(xì)。編譯時加-DLWS_LOGGING運(yùn)行前設(shè)置環(huán)境變量export LWS_LOG_LEVEL1023能看到每個連接的握手過程、協(xié)議匹配結(jié)果、read/write事件。排查子協(xié)議協(xié)商問題優(yōu)先看日志里有沒有accept ws或reject標(biāo)記。日志不夠再用網(wǎng)絡(luò)抓包工具看TCP層。抓一次握手包重點看請求頭的Sec-WebSocket-Protocol和服務(wù)端響應(yīng)頭。很多時候問題不在lws代碼而是客戶端帶錯了協(xié)議名字。5.3 保命調(diào)試經(jīng)驗我踩過的最大一個坑是在回調(diào)里做了重計算導(dǎo)致lws無法及時處理內(nèi)核緩沖區(qū)里的數(shù)據(jù)最終觸發(fā)客戶端超時重連。現(xiàn)在我的開發(fā)習(xí)慣是回調(diào)函數(shù)里只做狀態(tài)機(jī)切型和數(shù)據(jù)入隊重活放到獨(dú)立工作線程去處理。進(jìn)程啟動時開幾個worker線程共享一個帶鎖的任務(wù)隊列回調(diào)push任務(wù)后立刻返回。多協(xié)議再多只要保持“回調(diào)快進(jìn)快出”整個服務(wù)的穩(wěn)定性就有保障。另一個經(jīng)驗是新協(xié)議上線先只跑測試端口不要直接混進(jìn)生產(chǎn)vhost。lws的協(xié)議表改變會影響事件循環(huán)的初始化單獨(dú)vhost調(diào)試起來定位問題快很多。等協(xié)議穩(wěn)定了再和主vhost合并。6. 最后分享一點我的使用心得和lws打了幾年交道我最大的感受是它的多協(xié)議能力被嚴(yán)重低估了。很多人把它當(dāng)WebSocket庫用遇到HTTP需求就繞道其實lws的HTTP協(xié)議、靜態(tài)文件服務(wù)、多vhost隔離這些能力拼在一起就是一個小而完整的網(wǎng)關(guān)。做設(shè)備后端這類場景一個lws進(jìn)程把設(shè)備接入、管理API、頁面下發(fā)全部吃掉部署時只需要一個二進(jìn)制、一個配置文件非常省心。如果你接下來想深入建議沿著三條線繼續(xù)抄作業(yè)一是給多協(xié)議服務(wù)加上TLS證書只掛一份四個協(xié)議共享加密通道二是用lws_create_vhost把內(nèi)部API和外部設(shè)備流量徹底分開日志也各走各的三是在回調(diào)里結(jié)合lws自帶的工作隊列把重計算任務(wù)挪出去。等你把這三件事做完再回頭看“多協(xié)議工作”這個概念就會覺得它根本不是某個高級特性而只是lws作為網(wǎng)絡(luò)服務(wù)框架的基礎(chǔ)設(shè)計。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄色小视频日本txt| 男人的天堂视频精品乱在线| 5月婷婷6月六月丁香| 99少妇内射| 北京专精特新企业招聘信息| 18岁禁 茉莉成人久久| 欧美少妇色图| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 精品九九国产无码| 国内亚洲高清无码| 中国熟妇| 欧美综合色,www| 日夜久久久九九九久| 超碰久久草| 丝袜美腿诱惑亚洲欧美视频在线观看 | 91搡老女人老妇女老熟女歌词翻译| 亚洲淫乱骚妇AV| 亚洲欧美精品一区天堂久久 | 台欧久久精品视频| 99久久综合| 少妇无码av专区线| 精品久久久久久中文字幕三区| 欧美亚洲特P| 国产精品一区二区后入| 激情亚洲天堂| 精品人妻二区三区| 亚洲另类久操网| 色综合色欲色综合色综合色综合| 在线色导航| 亚洲一二三四区| 日韩91网| 大逼色网站| 凹凸 69堂 在线播放| 免费成人在线熟妇网| 强奸乱伦大香蕉网| 综合网91| 人妻少妇精品| 夜夜爽夜夜操| 亚洲欧美人妻| 99综合网| 95人妻爽爽人人做人人澡| 在免费jIzzjIzz在线视频| 一区操逼| www..com操老师| 琪琪精品免费一区二区三区 | 天天操夜夜操| 日韩精品 资源| 操人无码| 天天综合AV| 亚洲av总站| 99久久无色码| 欧美韩国你懂得在线| 欧美亚洲第1页| 亚洲无码视频免费在线观看网址!| 久久久久9999妇女| 日韩99神马视频播放| 北条麻妃99精品青青久久| 涩五月婷婷| av凤凰久久久| 一区二区 韩日AV| 天天爽天天操| 狠狠搞 亚洲91| 国产精品制服丝袜中文字幕日韩一区二区三区 | 激情另类激情| 999综合网| 亚洲av青草久久一区二区| 精品欧美老熟女一二区| 久久久九九网站| 探花精品视频| 亚洲情色一区综合| 国产精品对白自产拍| 欧美性少妇| 少妇久久久久久| 99久久久无码精品国产人| 久久99黄色卞西瓜| 熟女中出视频| 六月丁香久久| 深夜啪啪啪视频免费| 97久精品| 精品人妻视频一区二区在线播放 | 精品国产一区二区三区久久久蜜臀| 丰满少妇高潮无码| 欧美少妇高潮视频| 欧美精品精品一区二区| 亚欧性爱在线无码| 老熟女区| 欧美日韩制服| 在线播放一级无码视频 | 男人的天堂日本东京热| 超碰97国产欧美| 呦呦影院| 丁香激情网| 91艹逼精品| 97免费在线观看| 一区二区三区亚洲| 后X久久| 亚洲日韩久久精品一区| 欧美日韩大黄片| 91|九色|国产熟女| 亚洲天堂美臀在线| 国产精品亚洲一级av第二区| 另类图片五月| 欧日韩一二三f区| 五十路六十路七十路熟婆| 久热婷婷| 久九9精品| 中文字幕精品一区二| 噜噜在线| 国产精品青青草| 国产夫妻性生活视频| 九九草| 一牛影视成人片免费| 啊啊啊啊一区| 狼人狠干| 欧美日韩99| 国产精品午夜福利视频| 91小视频| 亚洲精品人体| 色嘟嘟人妻天堂网| 久久久久白虎| 激情99| 51一区二区三区| 欧美日韩国产高清在线一二三区| 国产AV天美| 日本高清视频xxxx| 人妻社区男人天堂| 九t超碰| 日本幼女18+| 亚洲欧洲综合av在线| 91老司机在线视频免费观看 | 精品久久在线区一区| 酒色综合网| 四虎精品一区二区| 9久久精品| 午夜福利 成人 91| 亚洲熟女中文字幕在线| 亚洲精品 欧美97色色| 色yeye成人免费视频| 福利天堂| 91精品人妻电影| 综合97久久| WWW黄片COM| 中文无线日韩一区| aaa一级黄片| 国产精品伦理| 九九内射在线| TS人妖另类精品视频系列| 北条麻妃99精品青青久久| 久久神马| 欧洲一区二区三区免费| 国产日本久久免费精品| 青娱乐啪啪视频| 91女神在线视频| 秋霞蝌科网日本一区| 乱操9999| 国产专区路线| 美女自卫慰黄网站免费| 国产无码精品无码| 婷婷激情五月综合| 天天色悠悠激情| 亚洲精品性爱片| 国产suv精品一区二六| 激情五月天丁香社区| 久区视频| 亚洲天堂美臀在线| 日韩99神马视频播放片在线播放| 岛国色情视频在线观看| 久久线上视频免费看| 3571色综合一区二区二区| 黄色视频高清无码网站| 九九热av| 少妇第一页| 夜夜爽爽爽| 欧美伊人久久综合网| 视频在线中文字幕| 91在线美女| 国产午夜激片Av毛片不卡| 九九九九热| 色香综合天天影视综合 | 九九久久综合| 春色校园综合网| 亚州AV无码国产精品| 天美传媒AV在线播放| 亚洲男人的天堂在线看| 韩国轻伦国内自拍一区| 六月丁香网| 欧亚性爱啪啪| 久久久精品中文字幕爱豆| 超碰伊人在线| 久久99人妖视频国产| 密臀国产在线| 中文在线视频| 中文字幕十五区| 久久侵犯人妻爽爽爽| 欧美视频一区二区在线| 成人97人人超碰人人| 啊啊啊好大好深| 日韩八十路老熟女| 大香蕉欧美日韩| 99色悠悠| 亚洲最大91网| 狠狠干综合| 欧美十八禁在线看| 日韩乱伦影音先锋| 人人摸人人干人人拍97| 乱伦av麻豆| 超碰在线香蕉| 国产网红精品| 99热99在线播放激情| 老熟女综合| 欧美日韩婷婷中文| 久久综合中文国产| 国产AV天美| 97chaopengongkai| 传媒在线观看一区二区三区| 91精品国| 久久久久久久久999| 超碰97欧美日韩| 视频在线观看一二三区| 精品免费1| 91九久| 亚洲91av| 蜜桃视频一区二区三区在线观看| 在线 亚洲 网爆 自拍| 中文字幕丝袜美腿| 清清草影| 精品人妻视频一区二区在线播放 | 干b在线性社区| 久久精品亚洲东京热色播| 久久精品国产精品亚洲艾通辽熟妇 | 国产一区二区三区导航| 精品色色| 久久一区,青青青青草视频在线播放| 9久综合网| 久久理论字幕视频| 久久精品中文| 亚洲美女精品九九视频| 国产91亚洲精品一区二区三区| CCYY草草影院地址入口| 国产一级特黄大片处女| 91操人| 色色激情五月天| 中文字幕第页| 天天α片| 999热日韩精品| 精品玖九九久| 第四色奇米影视777| 大香网伊人久久综合网eew| 四季AV综合网址| 亚洲91大片| 精品一区二区三区麻豆| 国产黄色视频久久| 九九无码视频| 操逼日韩无码| 日本免费亚洲欧美| 欧美伦乱爱| 蜜桃臀AV在线| 人人操欧美风骚| 岛国大片在线观看网站入口| 农村妇女一级二级三级视频| 精品少妇人妻| 亚洲中文字幕熟女| 亚洲色久| 国产免费久久精品99re韩国| 亚洲精品人体| 性做久久久久久久| 亭亭在线资源| 亚洲国产精品V?在线播放| 新婚人妻扶着粗大强行坐下| 91在线限制级| 羞涩视频| 九九色精品| 中文字幕人乱码中文字的预防方法 | 久久系列| 牛牛aV| 欧美少妇一区二区三区| 久久青青草在线视频| 国语国产操逼伊人AV网| 男人天堂站| 999色欧美中文字幕| 91视频伊人| 人妻碰碰碰碰碰碰| 午夜精品久久99蜜桃的功能章节| 天天操天天舔| 欧美色图 人妻| 91色综合| 91丝袜美女| 日韩99999| 国产综合操逼高清| 欧洲亚洲综合| 日本操嫩b网| 四虎国产成人精品免费一女五男| 国产欧美在线观看免费观看| 青青草操逼逼视频| 青青五月天| 中文字幕在线免费观看视频| 精品十八在线观看| 久久久成人国产精品无码| 精品人妻一区二区乱码一区二区| 69视频入口| yirendaxiangjiashipin| 色色九区| 夜夜爽妓女| 免费精品国偷自产在线在线| 久久熟女人| 国产97视频| 先锋精品av色鲁| 四虎在线观看视频| 暖暖精品二区三区观看| 翔田千里A片一区二区| 花野真衣| 男女猛烈无遮掩视频免费软件| 丰满少妇一区二区三区专区| 国产一区二区三区高清视频| 青青色综合| 香伊人在线| 老鸭窝黄色视频网站| 影音先锋新男人| 91精产一区二区三区| 国产www色在线观看| #NAME?| 国产超碰人人爽人人做| 欧洲亚洲人妻无码高清久久三区四区| 国产日比| 91看黄片| 久热99999| 大香蕉乱伦视频网| 一区在线精品中文字幕| av 模特一区了| 国产美女mm131爽爽爽爽| 午夜操操操| 亚洲 欧美都市激情| 亚洲九九视频| 丝袜夫妻自拍| 国产三级电影免费观看| 91少妇人妻| 亚洲视频,小说| 五月天黄色激情视频| 99国产女人| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 大学生口爆吞精| 丝袜美腿制服人妻二区中文字幕| 乱老女人一区二区视频| 免费视频97| 亚洲色图加勒比| 东亚亚洲无码高清| 精品国产三级av韩国在线| 色天欧美| 天无日色综合| 国产三级日产三级韩国三级| 国产亚洲精品精AV.| 中文字幕精品专区搜索结果91| 久久精品人体AV| 精品国产91av一区二区三区| 亚洲男人天堂av| 欧美综合制服在线| 丝袜熟女2P| 亚洲av无线观看| 四虎午夜影院| 国产乱伦视频污| 91成人精品| 二级久久网| 欧美在线官网| 丁香五月天堂网| 欧美成人一级免费电影| 欧美日韩操逼动图| 欧美成年人性爱视频免费观看| 久久人体一区二区| 日本五十路在线| 校园春色之综合网| 激情色播| 天天日天天操心| 亚洲精美粉嫩嫩泬在线观看 | 综合激情一一91| 丰满人妻一区二区三区在线| 久热超碰| 人妻熟妇久草在线| 97超碰天天爱天天爱| 啊啊啊啊嗯嗯嗯用力好爽 | 懂色天天爱天天日天天射天天澡| 97精品一区二区视频| 欧美丝袜亚洲| 亚洲成人帖图| 狠狠97| 夜夜嗨老熟女AV一区二区三区| 青久操| 女人妻一区| 亚洲欧美精品一区天堂久久 | 亚洲男人bt天堂| 五月天成人综合| 国产又色又爽又舒服的三级视频| 中文字幕免费看大片| 黄片免费看的| 日韩一级成人毛片免费观看| 顶级丝袜熟女一区二区三区| 无码免费精品高清| www.av在线观看| 在线观看黄色电话| www.色99| www.狠狠干.coom | 四虎免费视频| 亚洲色欧| 国产精品96久久久久久| 青青操网| 成人七区| 日韩,欧美,中文在线| 免费作爱一级视频| 久久99久久99精品免视看婷婷| av资源在线观看少妇| AV中文在线| 后X久久| 99re只有精品| 国产免费一区| 婷婷激情四射| 亚洲男人久久综合天堂| japan日本高清乱xxxx| 黄色网址在线免费观看| 激情五月天综合网| 国产成自自拍在线观看| 桑老女人九区| 秋霞怕怕片| 欧美日日操| 夜夜草网站| 久操高青| 久久人妻少妇| 天天干人人看综合| 国产精品嫩草影院免费| 啊啊啊不要好疼视频| 91中文精品日韩欧美在线| 天天插天天操天天摸天天射天天看| AV色五月天| 欧美夜夜| 日本高清一区二区在线| 人妻插插人妻人| 久久后入制服| 欧美成人A√在线一区二区| 91c色| 色老汉玖玖爱| 蜜臀aV午夜一区二区三区| 中文 人妻 制服| 蜜乳AV一区| 亚洲精品久| 91国产丝袜美女| 91亚洲综合| 天美麻花大全视频| 男生女生啊啊啊啊| 亚洲色图图片| 午夜一区| 97欧美色综合| 女人被男人桶爽视频网站| 吻戏激情性巴克| 粉嫩久久久极品| 日本乱人伦片中文三区| 欧美日韩成人在线| 丰满人妻一区| 免费的很黄很污的全部视频| 日本少妇va7777| 欧美综合天堂| 欧亚在线视频| 日韩欧美天堂| 日日操丁香五月天| 中国小夫妻勾搭露脸淫荡对白| 亚洲欧美另类图片| 亚洲色婷婷| 91亚.色| 欧美人妻久久精品二区三区 | 久久青娱乐| 国产熟女免费观看久久| 亚拍在线| 久久成人国产| 天天超级碰碰碰| 波多野结衣一级视频| AV天堂男人的天堂| 免费αV在线视频| 色妺妺在线视频| 蜜臀久久99精品久久久久久-DVD原版全| 男人的天堂一区三区| 久久久久斤小| 亚洲 欧美 手机在线观看| 成人精品欧洲亚洲| 成人性爱全视频观看| 精品九九九九九九九九九| 欧美日韩黄片精品在线| 日韩av色图综合| 国产黄色剧情影片麻豆免费播放| 成人网站 免费观看| 殴美色网| 亚洲成人在线资源| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 色眯眯射| 亚洲最新Av| 97视频www| 乱伦图一区| 人妻无码一区二区三区久久99| 日本五十路熟女一区二区| 成人天天爽| 国产女人91精品嗷嗷嗷嗷| 97久久国产精品| 大香蕉综合在线| 亚洲在线a| 久久久婷婷| 国产最新小视频在线播放下载| 天天舔天天日天天射| 久久AV无码网址| 99re视频在线播放青草| 亚洲中文字幕有码视频一区二区三区| 天天色天天干天天射| 亚洲激情深爱文学小说网站| 五月婷丁香| 国产精品久久aV| 啊啊啊啊好疼视频| 中亚av| 九九精品99| 九九热re99re6在线精品| 观看免费区二区三区二| 久久精品三级影视| 婷婷色色五月天福利| 激情黄色五月天| 日韩三级一区| 国产强上视频在线观看| 久久久久九九九九| 安微少妇操BBB| 亚洲乱色视频一区、二区在线| av无码av无码专区| 亚洲不卡三级手机播放| 欧美日韩制服| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | av资源在线观看少妇| 国产精品美女| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 久久精视频美日韩在线视频| 亚洲?V高清一区二区三区尤物| 97精品中文字幕| 日本青青草在线| 99久久久久| 最好看的中文字幕在线2018| 中国一级αV| 老熟女天天操| 久久久久久久综合,国产| 色诱中文字幕| 91女在线观看| 亚洲男人天堂Av| 日韩性爱播放| 极品美女福利在线观看| 国产一区二区在线播放量| 综合久久2017| 国产农村妇女毛片精品久久| 蜜臀久久精品久久久久视频| 丰满精品人妻少妇久久字幕| 欧美专利1区2区3区4区5区免费| 婷婷综合网| 国产av美女被艹的乱叫| 日本成人电影资源网| 国产精品久久久久久照片| 97超碰人人操人人操| 91殴美| 欧美激情精品久久久久久| 97超碰色中文字幕| 亚洲一区制服诱惑| 亚洲综合 欧美| 久久精品人妻一区二区| 蜜桃一区二区三区| 欧美91精彩| 亚洲黄色网址| 天天综合网亚洲综合网| 九九人妻| 久热精品在线| 青草成人免费视频一COm| 中国和日本人色哪个不下载能放| 亚洲国产97在线精品一区| 国产97/欧美| 夜夜黄| 无码二级三级| 日韩色| 不卡av免费在线网址| 91精品国产91久久福利| 国产精品原创巨作?v网站| 在线岛| 色嗨嗨在线| 免费观看啪视频| 天天爽爽爽爽| 国产传媒一区日韩| 嫩草 我啊~嗯~在线| 欧美专区17页| 国产女人视频三四五区| 无码操逼视频一下| 狠狠色噜噜狠狠狠狠狠色综合久久 | 99re6国产精品99re| 伊人96在线| 花花AV导航| 人人操人人干xxx| 激情网色| 国产九月婷婷| 伊人991| 亚洲丝袜二区在线| 人妻色偷色噜| 69精品久久久久中文字幕| 啪啪啪大香蕉| 黄色高清久久无码依人| 人妻人久久精品中文字幕| 91熟女网| 91av一区二区在线观看| 日本网色| 69精品人人人人| 欧美色道啊| 91精品人| 精品亚洲国产成人AV制服丝袜| 翘臀vidoes| 99热大香蕉伊在线| 精品国产av一区二区三区四区入口| 国产成人午夜视频网址| 色婷婷五月天| 超碰97首页| 中文操逼字幕| 99久久久99久久91熟女| 熟女AV一区| 男人天堂2017| 女人高潮抽搐喷水视频网站| 日韩av色图综合| 亚洲黄色AV电影| 中文字幕一区电影在线观看| 色呦呦、国产精品| 91亚洲综合在线| 97人人操人人摸人人爱| 夜夜爽妓女| 78精品| 久久久久久国产精品免费网站 | 日韩欧美加勒比| 亚洲欧美国产其他二区| 天天看特黄的免费网站| 国产老太乱伦一区| 欧美亚洲日韩16色| 日本加勒比无码专区| 91强热人妻| 欧美亚洲美少妇一区二区| 上特色A在线| 久久婷婷伊人| 久草色在线观看| 成人 日本A片无码8888| 国产熟妇一区二区| 香蕉国产精品麻豆亚洲欧美日韩| 91麻豆天美国产欧美| 熟人人妻少妇精品久久| 天堂8在线新版官网| 强奸熟女一区二区三区 | 日韩国产十八禁| 日本人妻丰满熟妇久久久久久| 青青草中文-久久青草精品一区二区三| 日韩黄色小说| 亚洲第一无码播放立川理惠| 国产人妻精品一区二区三区秋霞 | 亚洲伊人a线观看视频| 99啪啪| 日本黄色精品专区网站| 青青草原综合久久大伊人精品| 欧洲精品一级二级精品综合视频综合| 99热这里只有精| 丰满少妇一区二区三区免费看| www.色婷婷| 九九九国产| 色综合91| 色色毛片| 欧美乱妇狂野欧美在线视频| 色色福利| 东北女人性交| 天天日少妇逼AV| 91老熟女视频| 青青草在线视频欧美| 日本成人A片免费看| 校园春色综合香蕉| 六月激情婷婷| 亚洲一区二区在线观看91| 夜夜操av亚洲一区二区| 国产av波波国产精品| 操逼短片| 激情第四色| 成人一二| 精品一区二区久久| 蜜臀少妇一区二区| 亚洲成人在线高清| 麻豆天美AV传媒第一页| 青青久草| 综合网,亚洲,欧美| 日韩久久.一级黄色片| 综合亚洲网| 中文字幕加勒比海高清无码免费视频| 人人看欧美性爱| 校园春色第一页| 久艹伊人精品综合在线| 青娱乐久久艹| 亚洲天天综合| 欧美色图在线视频少妇| 麻豆久久久一区二区| 午夜国产乱伦视频| 九九九九精品视频| 夜夜骑天天燥| 久久亚洲不卡| 日韩精品 视频一区二区| 熟女人妻一区二区三区免费看| 青女在线| 成年女人一区| 亚洲Av无码成人精品国产| 大肥女高潮bbwbbwhd视频| 日韩欧美偷拍美女视频| 射 色综合| 丁香六月东京热| 天天视频黄| 欧美精品庄| 91熟女.com| 青青草国产亚洲精品久久| 亚洲日韩国产欧美综合v| 国产中出内射一区二区| 香港久久久| 97超碰总站| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 激情深爱五月天| 可以免费观看的日韩av毛片| 偷拍 欧美 日韩| 亚洲欧美在线丝袜| 伊人96在线| surenchaopeng| 中文字幕在线观看第二页| 久久综合九九| 国产精品久久久三级无码| 在线观看免费视频国产| 日本αv| 超碰2017| 欧美激情高清性猛交| 爱丝福利| 久久机热| 操老熟女AV| 91人妻久久久久久久久久久久久| 日韩激情视频| 天天综合有色网| 日本亚洲vr欧美不卡高清专区| 99熟女| 五月婷婷久久综合| 国产精品久久久久综合| 日韩美女,国产传媒,视频一区| Julia在线播放亚洲久久| 亚洲欧美日韩综合在线尤物| 殴美在线AⅤ| av在线免费一区二区| 双插性欧美一二三区| 日韩国产欧美伦理在线| 久久久久久亚洲中文| 高清无码在线播放网站| 精品国产三级av韩国在线| 黄色大片视频在线免费看| 精品视频一区二区| 日韩av无码网站| 午夜福利一区二区影院| 欧美日韩另类在线播放| 色五天伊人| 久久精品国产亚洲AV嘿嘿| 强奸乱伦大香蕉| 萌白酱自拍视频| 日韩精品永久在线观看| 中文字幕 国产 精品| 99熟女| 久久黄色网址| 91夜色chaopeng| 91久久国产综合精品| 欧美国产操逼| 欧美亚州综合网图片| 97狠狠| 国产精品午夜福利亚洲综合网| 国产亚洲性生活视频播放| blacked精品一区国产| 日韩欧美俄罗斯A片| 五月婷婷激情综合| 九九热九九热| 天天日天天屌天天操| 视频在线中文字幕| 高清无码人妻久久久一区二区三区aⅴ| 亚洲国产精品成人久久蜜臀| 天天懆天天日| 去干网最新版| 毛片视频白嫩| 99re在线视频国产| 亚洲熟女人妻中文字幕一区二区| 探花视频免费观看国产专区| 久久91精品国产9丨久久分亭| 久操精品网| 97激情97激情| 熟妇一区,二区,三区。| 91久久青青草原精品| 国产精品毛片?v一区二区三区| 日本午夜精品理论片A级APP发布| 天无日色综合| 97就爱干| 伊人国产成人av网站| 亚洲一区二区三区AV无码| 丝袜AV一二三区| 97伪v| 天天看片青娱乐| 约操熟妇| 岛国小电影| 四季av一区二区凹凸精品小说| 插入逼91| 97色色婷婷| 裸体1区| 毛片一区二区| 色综合久久888| 加勒比海成人视频网 | 99视频内射三四| 嗯嗯啊好大| 日本一道在线播放高清| 日韩av不卡在线观看| 亚洲网自拍| 亚洲丝袜综合| 国产精品99久久久www| 啊啊啊快操我视频| 九九九色| 色综合久久久久| 久久精品国产精品| 中文字幕日韩专区精品系列 | 亚洲在钱| 色婷婷视频| 久久999久| 无码高清操逼| 久久久草成人网站久久久草成人久久久草久久久 | 成人片在线播放| 午夜精品人妻二区三区| www.久久制服糖| 视频在线观看一二三区| 青青五月天| 亚洲经典啪啪| 日本一级不卡一二区| 一区二区三区黄色片a| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 午夜乱轮操逼视频免费看| 少妇免费视频| 麻豆久久一区二区三区| 长长久久88视频| 男人的天堂com| 国内毛片免费h片在线| 99re6在线视频精品免费完整版安卓版| 国产精品久久久久久高清无码免费看 | 欧美在线伊人色| 亚洲网站一区二区在线| 啊好大好舒服| 亚洲中文字幕精品一区| 日本免费不卡二区| 久久婷婷电影网| 免費人妻夜夜爽天天爽爽一区| 蜜臀99久久| 丁香五月天婷婷姐| 粉嫩av平台| 蜜臀99999| 日韩国产欧美伦理在线| 亚洲天天影视色综合| 温婉少妇玩3p| 久肏视频字幕| 五月婷婷五月天| 夜夜躁狠狠躁日日躁av| 天美传媒国产原创中文字幕亚洲欧美另类| 揉揉日日日日| 操九九九九九九| 黄色成人网久久久久久| 刺激精品视频| 在线可观看的黄色网址| 99热这里只有精品1| 亚洲综合在线视频| 久久精品人妻一区| 99RE在线视频精品,这里只有精品| 吖在线不卡一区二区国产剧情| 亚洲国内精品成人不卡| 欧美日韩中文亚洲v在线综合| 免费视频观看60秒| 色999人与兽| 自怕偷自怕亚洲精品| 中文字幕精品亚洲熟女| 99在线免费观看| 99精品国产户外露出| 亚洲精品蜜桃久久久久久久| 日本韩欧美在线播放a| 东北熟女91| 欧美白嫩女HD| 亚洲精品美女久久久久久久久| 综合 亚洲 欧美| 亚洲免费97免费| 99热只有这里有精品| 日韩精品-原创伙伴| av午夜玫瑰| 天堂中文资源在线bt| 四虎影视精品| 国内97干免费看| 激情综合色| 一本精品日本在线视频精品| 欧美热图99| 绑缚麻绳人妻寝取完整版| 九色视频91| 国产无码精品高清| 久久日韩肥臀| 人妻熟女一区二区三区在线| 91操人视频| 91影库| 国产伦精品| 无码人妻系列少妇| 蜜臀精品1区2区| 欧美日韩操逼嗦吊| 欧美大波激情xxxx| 亚欧美综合网| 老司机午夜精品福利视频一区二区| 亚洲午夜免费狠狠干| 亚洲日韩美国人妻| 精品欧美不卡在线播放| 在线洲亚线| 91在线/欧洲| 综合日韩激情另类图片| 日日夜夜狠狠| 囯产操逼片| 欧美日韩性爱电影在线| 青青草福利视频| 精品人妻一区二区三区蜜桃视频| 12一15性XXXX粉嫩国产| 热G综合热G中文| 欧洲亚洲天堂精品| 欧美色图私拍91| 欧美亚洲日韩人妻在线观看| 牛牛aV| 18禁的网站在线| 另类小说综合网| 人人搞人人插人人操| 无马一区二区| 97视频在线免费| 午夜精品人妻二区三区| 精品无码久久久久| 欧美A√综合网| 大香蕉99热| 欧美在线色图| 午夜呻吟欧美| 蜜桃久久久久久| 日韩精品一区二区三区四虎影视| 婷婷激情综合网| 立川理惠无码一区二区| 爆操无码| 国产精品久久久鸭无码的功能| 操逼1区| 亚洲一欧洲中文字幕在线| 国产自产自拍| 日韩色欲久久一二三四区| 午夜操逼不卡| 天天操天天射天天日| 中文字幕乱码人妻二区三区| 天天爽夜夜爽夜夜爽精| 黑人美精品 A片| 国产精品毛片?v一区二区三区 | 老熟女搡BBBB搡BBBB视频| 国产精品麻豆成人av| 国产黄色视频久久| 日韩高清黄片| 3d成人精品一区二区| 操逼片中文| 亚洲精品美女久久久久久久久| 日本三级韩三级99久久| 亚洲少妇喷视频看| 暖暖精品二区三区观看| 99久久综合| 东京热不卡视频| 欧美线天码中字| 久久香蕉国产线看观看亚洲女人 | 色妇综合网| 亚洲精品国语在线播放| AV一区观看| 亚洲中文字母在线播放| 9l视频自拍9l九色成人| 天天摸,夜夜摸| 青青草黑寡妇男人天堂| 久日91在线| 97在线观看视频| 免费试看60秒| 性色生活片久久毛片婬片免费放女人一级毛片| 欧美经典一区二区三区| 国产67194| 人人色人人射人人妻| 色香在线| 婷婷丁香人妻 | 看看小穴| 性爱AV天堂| 99热只有这里有精品| www.色操逼| 北京专精特新企业招聘信息| 乱久久久| 97手机日韩| 蜜乳Av成人片网站| 色色色热| 麻豆伊人网| 美女黄页网站| 亚洲欧洲日本精品中文a∨| 日韩欧美一级特黄大片| 91蜜臀熟女| 亚洲综合一| 超碰午夜| 欧美特大黄一级片片免费| 人妻天天爽夜夜爽爽| 曰本道人妻久久久在线不卡色视频| 91亚洲人| 国产美女mm131爽爽爽爽| 视频二区美腿丝袜制服人妻欧美 | 大香蕉中文201| 素人一区二区三区日韩| 人人操AV| 欧美国产操逼| 欧美日韩午夜精品一区二区三区| 日本在线不卡一二区| 大香蕉在线免| 综合网 欧美| 性色av网站| 91艹逼精品| 国产精品久久久久久久久久久久| 亚洲二区精品在线观看 | 视频国产成人精品日本亚洲18| www.色操逼| AV中文字幕剧情1区2区3| 精品视频一区二区| 九色婷婷| 欧美一品道| 91精品女厕偷拍视频| 夜夜操av亚洲一区二区| 夜夜爽夜夜操| 无码国产精品午夜不卡( | 中国操逼无码| 久久天天摸| 综合五月天| 深田咏美亚洲精品福利社| 超碰欧美在线欧美| 国产强奸乱伦xd| 国产13区| 欧美第一页| 91在线页| 亚洲成人ab| 性爱久久| 亚洲综合网91| 99色在线视频| 日韩欧美中文字幕搭讪巨乳美人妻视频| 欧美不卡二区| 黑人精品久久97| 天天躁日日躁xxxxx| 国产精品视频播放| 亚洲激情在线观看一区| 欧洲射精91| 99久久亚洲精品无码毛片潘甜甜| 久久久久13| 偷拍亚洲| 伊人97色天使| 欧美18 在线观看| 天天日日本| 国产婷婷综合在线观看| 国产人伦精品一区二区三区| 91色色网站| 九九九久千久久激情蜜桃在线看 | 人妻中文字幕日韩电影| 天天大干大香蕉| 国产精品自拍欧美在线| 一级免费精品| 99无码视频| 久久久久久久9| 欧美美女啪啪视频| 男人女人18禁片免费看网站| 天天做天天爱天天爽AV| 亚洲精品性爱片| 豆1无夜无码| 久久久久国产无av| 美女啊啊啊啊啊啊| 亚洲情色五月天| 成人无码在线超碰网| 色天欧美| 亚洲色诱惑| 久久久久国产精品久久久| 嗯~啊~快点 死我视频| 另类TS人妖一区二区三区| 天天草AV| 蜜桃臀av在线观看| 97超碰磁| 十八禁电影伊人网| 五月丁香六月| 东京热视频网| 啊啊啊啊在线播放| 欧美夜夜狠| 97免费视频网| 亚洲黄色网址视频| 久久久夜夜夜| 亚洲欧美一区二区不卡视频播放| 久久久久久久国产a∨| juliaann欧美丝袜办公室| 欧色综合| 亚洲精品日韩国产欧美| 懂色aV一区二区天美传媒| 国产青青美女玩逼视频| 99热超碰在线| 国内偷自视频区视频综合| 丰满少妇精品一区二区| 亚洲男人的天堂V| 手机在线人成免费视频| 91人人| 99re6国产精品99re| 亚洲熟妇极品| 日韩人妻中文视频| 超碰95| 91美女视频电影| 嗯……啊…嗯嗯…啊…好舒服| 白嫩国模丰满一二三区| 一中国女人毛片水真多| 国产超碰欧美| 麻豆AV96熟妇人妻| 天天干,天天日| 日韩乱伦影音先锋| 黄片www视频免费| 抽插一区二区视频| 夜夜嗨绯色| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲色图欧美视频| 91人妻精华帖| 思思久热在线精品66| 亚州黄站| 久久97超碰香蕉| 亚州乱码中文字幕综合久久久| 91色久| 中国东北熟女老太婆内谢| 欧美亚洲国产91在线| 午夜精品久久久久久久久久久久久| 国产精品九九| 国产乱码精品久久久久久| 久妇网| 五月天激情小说网| www…国产操逼| 欧美日韩在线国产在线| 国产精品无码成人精品| 天天干嫩逼网| 揉揉揉夜夜| 蜜桃午夜视频一区二区| 是还免费视频1727我| 日产中文字幕2020| 成 人 影视 一区 二区 三区 四区| 五月天激情小说| 日本精品成人无码| 亚洲操逼无码| 亚洲人妻中文高清| 蜜桃成人1区2区3区| 69精品在线| 蜜乳AV色欲AVAV无码| 成全在线观看免费观看| 高清国产无码av| 测评在线观看AV| 国产精品视屏| 加勒比中文av| 91A欧美电影网站| 日韩日韩日韩-国产乱码精品一区二区| 国产久久久久影院老熟女| baiduhicn.com。| 1204金沙人妻懂旧版免费| 国产天天看| 91欧美美女日韩国产婷婷| 久久精品老司| 欧美日动态视频| 久草精品一区 | 熟妇高潮精品一区二区三区下载| 97久久免费|