【问题标题】:Socket-io client keeps sending connect requestsSocket-io 客户端不断发送连接请求
【发布时间】:2017-12-19 04:48:29
【问题描述】:

我正在创建包含一些实时功能的应用程序。我在前端使用Node.jsSocketIOExpress + React。我的后端处理 httpws 请求。我使用带有代理选项的webpack-dev-server 将客户端的请求重定向到我的本地服务器。

几天前,虽然我既没有接触过 webpack 配置也没有接触后端代码,但在客户端单次调用 io({ path: '/socket' }) 会导致向我的后端发送大量连接请求。

原因不是 HMR、组件的重新渲染或客户端的某些循环。我确信客户端只调用一次io({ path: '/socket' })。即使我将分支更改为一些旧分支(其中问题肯定不存在),在重新安装所有 node_modules 后,问题仍然存在。所以这甚至可能与一些网络/硬件相关。我使用的是 Windows 10、Node.js 6。

我的后端在控制台中生成的调试模式示例日志:

这只是日志的一部分,通常它会保持快速连接并且不会停止。

知道这里发生了什么吗?

【问题讨论】:

  • 它无法退出轮询的一个常见原因是您的 socket.io 的客户端和服务器版本不匹配。这会在 socket.io 完成到 webSocket 的转换之前导致服务器断开连接。由于您没有显示任何代码,我们不知道您从哪里获取客户端 socket.io 代码,也不知道它是否与您在服务器上运行的版本完全相同。
  • 谢谢,但我有相同的版本

标签: node.js windows websocket socket.io webpack-dev-server


【解决方案1】:

问题是socket.io 继续使用长轮询,即使 websocket 已经可用。为了解决这个问题,我将transports: ['websocket'] 传递给这样的连接选项:

import io from 'socket.io-client';
io({ path: '/socket', transports: ['websocket'] });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-09-14
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多