我正在创建包含一些实时功能的应用。我在前端使用Node.js
,SocketIO
和Express
+ React
。我的后端处理http
和ws
请求。我使用带代理选项的webpack-dev-server
将客户端的请求重定向到我的本地服务器。
几天前,虽然我既没有触及webpack配置也没有触及后端代码,但客户端单个调用io({ path: '/socket' })
会导致向我的后端发送大量连接请求。
原因不是HMR,组件重新渲染或客户端的某些循环。我确信客户端只调用一次io({ path: '/socket' })
。即使我将分支更改为一些旧分支(其中问题肯定不存在),在重新安装所有node_modules
之后,问题仍然存在。所以这可能是一些网络/硬件相关甚至。我使用Windows 10,Node.js 6。
我的后端在控制台中生成的调试模式中的示例日志:
这只是日志的一部分,通常它会保持连接非常快并且不会停止。
知道这里发生了什么吗?
问题是socket.io
继续使用长轮询,即使websocket已经可用。为了解决这个问题,我将transports: ['websocket']
传递给了这样的连接选项:
import io from 'socket.io-client';
io({ path: '/socket', transports: ['websocket'] });