@(markdown)
最近項目裡調試websocket相關的nodejs實現的server,剛接觸web開發的小伙伴們對websocket協議不熟悉,遇到問題很容易悲劇。這裡只說自己理解的部分以及解決問題的經驗吧。
首先,nodeserver用的socketio,於是寫了個頁面,用js發起websocket握手,發現一直是longpoll,猜測webserver不支持websocket協議,一查果然,haproxy設置的http反向代理。拋棄haproxy,握手成功,浏覽器申請將協議upgrade到websocket,web服務器同意,後續數據通過frame傳輸。解決,證明nodeserver沒有什麼問題。
第二次,客戶端為cocosdx實現的websocket協議,連接nodeserver的時候,直接發生握手失敗,不能用chrome開發工具,於是用tcpdump抓包,發現nodeserver抓到的http協議中未出現upgrade字樣,猜測前面有不支持websocket協議的webserver攔截到,一問果然,前面有loadbalance,估計普通運維也不會考慮websocket協議,直接讓改成tcp代理,更改後搞定。