23

当我使用本机 websocket API 时,我可以在我的 chrome 控制台中看到一个用于 sockts 的有效负载: 在此处输入图像描述

但是当我将 socket.io 与他们的发出事件一起使用时,我可以在我的实际有效负载之前看到一些奇怪的数字。我确实理解颜色意味着您发送或接收数据,但是这些数字是什么42, 3, 2, 430, 420, 5意思。

有没有地方可以得到这些数字的完整列表和描述?

在此处输入图像描述

生成它的代码有点大,所以我只发布小片段。

客户端总是这样:

socket.emit('joinC', room, function(color){ ... });

服务器端如下所示:

io.sockets.in(room).emit('moveS', {...});

4

2 回答 2

25

我知道你刚才问过,但这些信息仍然留给那些正在研究的人。

我在 2.3.0 (socket.io) 和 3.4.2 (engine.io) 版本中对逆向工程进行了分析,得到以下结果:

第一个数字是 engine.io 的通信类型,使用枚举器:

钥匙 价值
0 “打开”
1 “关”
2 “平”
3 “乒乓”
4 “信息”
5 “升级”
6 “午睡”

第二个数字是 socket.io 的操作类型,使用枚举器

钥匙 价值
0 “连接”
1 “断开”
2 “事件”
3 “确认”
4 “错误”
5 “BINARY_EVENT”
6 “BINARY_ACK”

还有其他可以传递的可选信息,例如命名空间和 ID,但我不会进入那部分。

在这些代码之后,他需要一个 Json 数组,其中索引 0 是事件的名称,索引 1 是参数。

因此,该指令42["moveS",{"from":"g1", "to", "f3"}]是 engine.io (4) 的一条消息,是 socket.io (2) 的一个事件,它将发出传递 JSON{"from": "g1", "to", "f3"}作为参数的“moveS”动作(实际上JSON.Parse({"from": "g1", "to", "f3"}))。

希望这可以帮助。=D

于 2020-12-11T02:25:41.613 回答
13

Websocket 允许您通过全双工通信通道来回发送数据。

另一方面,Socket.IO 是一个实时应用程序框架,它使用 websockets 作为传输添加功能,如命名空间连接、房间、回退到其他传输等。要构建所有这些功能,来回交换的消息必须带有一些语义,以便 Socket .IO 知道它们的含义(即它是什么类型的消息、事件、错误等)以及如何处理它们。为此,它使用了一种协议,该协议使用一些标识它的语义的代码来构建消息。这就是你所看到的这些数字。

不幸的是,Socket.IO 文档非常简洁,很难准确理解这些代码是如何组合和解析的。要了解它们的确切含义,我认为需要查看 Socket.IO 源代码。

socket.io Github 问题编辑

这是在 socket.io-parser 和 engine.io-parser 中处理的,它们分别是 socket.io-protocol 和 engine.io-protocol 的实现。您可以在此处找到 socket.io和 engine.io协议描述。

在查看通过传输发送的实际数据时,这些文档中的编码部分很有趣。socket.io-protocol 处理元数据的编码,例如将名称空间编码为 engine.io-protocol 可处理格式。

于 2014-07-05T20:32:15.067 回答