【问题标题】:socket.io client doesn't set sid in requestssocket.io 客户端未在请求中设置 sid
【发布时间】:2020-11-08 20:49:14
【问题描述】:

我正在尝试构建一个 nodejs 脚本来与 socket.io 服务器通信。

const io = require('socket.io-client');
const socket = io('http://192.168.144.249');

socket.on('connect', () => {
  console.log('connected');
})

使用wireshark跟踪流量我可以看到以下内容:

所以浏览器会在响应正文和 cookie 中向我发送一个 sid。 不幸的是,我的以下请求不包含此 sid,并且我收到了 400 Bad Request 错误:

当我尝试从浏览器窗口构建相同的客户端时,我可以看到这个 cookie 确实设置为 cookie 和查询参数:

我不想使用浏览器,我想使用独立的节点脚本。据我了解,响应的解析和会话 ID 的包含应该由 socket.io-client 自动完成。我错了吗?如果是这样,我怎样才能拦截这个事件,以便我可以发送带有以下请求的 sid?

我是否应该首先向服务器发出一个简单的 http 请求,从那里获取 sid,然后在使用自定义 cookie 或自定义查询参数创建它时将其添加到 socket.io 客户端?

我还可以看到节点独立脚本正在使用 engine.io 版本 4(GET 请求中的EIO=4),而浏览器正在使用 engine.io 版本 3,但收到的响应似乎完全正确同样,所以我真的不认为这是阻止我的脚本自动完成与服务器握手的原因。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    好吧,我错了。确实是协议不匹配问题。

    我能够使用socket.io-client@1.0.2 使我的脚本正常工作。安装它:

    npm install socket.io-client@1.0.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 2011-08-04
      • 2018-05-31
      • 2012-03-18
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多