http请求后的Socket.IO帧头无效

Posted

技术标签:

【中文标题】http请求后的Socket.IO帧头无效【英文标题】:Socket.IO Invalid frame header after http Reqest 【发布时间】:2019-04-23 03:13:20 【问题描述】:

我有一个 nodejs express Rest API,我想添加 websocket 支持。 我在 api 部分使用this 样板,并添加了this library 和 socket.io 以在同一个项目中使用 websockets(我不确定它是否重要)。

我的 websocket 在没有 Rest API 的情况下按预期工作,但是一旦我向我的 API 发出 http 请求,与 websocket 的连接就会失败,并出现以下错误:

到 'ws://localhost:3000/socket.io/?EIO=3&transport=websocket' 的 WebSocket 连接失败:帧头无效

虽然已经建立的连接仍然有效。 这个问题一直存在,直到我重新启动我的服务器。

我发现了很多不同的可能导致此错误的原因,但没有一个对我有真正帮助。

编辑: 这就是我连接到 websockets 的方式。

const rooms = io.connect(
    'http://localhost:3000/rooms',
     transports: ['websocket'] 
);

【问题讨论】:

【参考方案1】:

我通过将堆栈切换到nestjs 解决了这个问题。 问题可能是因为 websocket 和 rest api 都在同一个端口上运行

【讨论】:

以上是关于http请求后的Socket.IO帧头无效的主要内容,如果未能解决你的问题,请参考以下文章

Websocket 失败 帧头无效

使用node.js的Websocket上的无效帧头

检索与 HTTP 请求相关的 socket.io 连接

带有 NGINX 和 http 2 的 Socket.io

让 socket.io、express 和 node-http2 通过 HTTP/2 进行通信

Socket.io被误解了[重复]