1. 程式人生 > >libuv與uWebSocket 掉坑之旅

libuv與uWebSocket 掉坑之旅

libuvuWebSocket都是開源的,這一點很棒。

libuv是Node.js的核心,強大、簡潔、優雅。

uWebSocket淺淺的封裝了libuv,改裝成websocket版(僅僅用了少量的libuv的東西)。

掉坑之旅開始:上週一切完美的事情,週一發生了轉折。客戶端和服務端在同一臺機器上,客戶端連線服務端,竟然需要1分鐘左右才能連線上,拔掉網線,瞬間就連上了。這也太神奇了吧。一大堆業務邏輯,還是多執行緒,找起來真費勁,頭皮發麻。小夥伴說是不是中毒了,一掃真的有毒。防毒3小時後,還是一樣的效果。痛定思痛,認真劃分模組,一點點測試,終於找到了,原來服務端還需要連線一個遠端的伺服器,而這個伺服器埠改了。

檢視原始碼發現:uWebSocket 沒有直接用Libuv封裝的完成埠,自己又整了一套,其中:

::connect(fd, result->ai_addr, result->ai_addrlen);

這一句阻塞5秒左右。完成埠也沒用多執行緒,這一句:

success = GetQueuedCompletionStatusEx

又阻塞5秒,再加上斷線重連,其他的客戶端根本沒機會連上來。

找到問題,修改就容易了。