https://wenda.workerman.net/question/2966
http://www.rfcreader.com/#rfc6455_line2178
http://www.zhuyuntao.cn/%e5%9f%ba%e4%ba%8enode%e5%ae%9e%e7%8e%b0websocket%e9%80%9a%e4%bf%a1/
场景复现条件:
后端server socket.io version 2.2.0
前端原生 WebSocket api发送链接请求。报错
index.html:23 WebSocket connection to 'ws://127.0.0.1:3000/' failed: Connection closed before receiving a handshake response。
恢复可用的条件一:
前端改用同版本 https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js
正常访问。
恢复可用的条件二:
前端保持不变,后端改用ws插件,不再使用socket.io插件。
正常访问。
但是报错的原因是什么呢? 找原因开始。。。。
看报错是 WebSocket 类发出的提示,意思是 失败:连接在接收握手响应之前关闭
是前后端握手过程失败,为啥会握手失败呢?
服务端解包失败,到时握手失败,服务端应该会有提示,Error decoding a packet.
查看文档发现 socket 和 websocket 是两种socket链接,用了不同的算法。
如果用websocket 访问 socket 服务如果对方不支持 WebSocket解析,将无法支持握手链接。
就算是这样的原因,那socket.io 客户端也用的时候是可以通信的,socket.io 转换了WebSocket的请求吗?
继续查看源码实现,搜索全部error过滤出那个错误,go on
。
。
引入了socket.io-parser
好深。
没看出为啥,请大神路过给个重点。未完待续
-------------------------------------------- 2019/9/3