[問題]使用 socket.io 遇到 400

dear all~

正在使用 socket.io 開發

server 是 express+socket.io on node.js
client angular 5

本來連線是都沒問題的
但後來為了使用 redis-client 需要用 async

發現自己的 node.js 只有 6.x 便升級 到 8.9.4 測試中 又升到 9.4.0

也對所有的 package 做了 update
(列出主要的)
express 4.15.2 -> 4.16.2
socket.io 2.0.3 -> 2.0.4

第一個遇到的問題是 invalid frame head, 而且會看到 chrome console 印不停
測試下發現 原本寫的 { transports: [‘websocket’] } 拿掉 就不會了

但就一直卡在 failed: Error during WebSocket handshake: Unexpected response code: 400

我查不太到 400 實際的定義( 應該就是單純指 Error during WebSocket handshake ),
或著說 一定造成它的原因

為釐清問題 我照著 socket.io 的 demo 另外開了一個 socket server
發現我的 client 連得上
而只要連我原本的 socket server 就會遇到 400
(client, 兩個 server 都在我 local)

因這樣的測試
認為 client 應該沒有問題
差別主要就在 server 上了
但是… 在交握就斷線了
在初始的寫法 其實都是一樣的 看不出差異
也懷疑是 redis-clinet 的問題 但拔掉 也是一樣

爬文中 發現這問題 從很久以前 到現在 都還有人問
但是 版本不用說 大家的環境 條件也都不一樣 很多都是在 ngix 上 或說裝了 ssl 什麼的

希望大家給點意見了
謝謝

我先告知

目前此問題已解決

有時間 再跟大家分享

其實也不太清楚實際的原因 哈哈

但先分享一個

“Sec-WebSocket-Key”: 是client 發送的一個base64 編碼的密文,要求server 必須返回一個對應加密的"Sec-WebSocket-Accept" 應答,否則client 會拋出"Error during WebSocket handshake" 錯誤,並關閉連接"

http://imweb.io/topic/584412459be501ba17b10a7b

1個讚

感覺socket是個很艱難的技術
我們WEB目前是http服務 之後要改成socket 對這非常陌生