当我使用原生websocket API时,我只能在Chrome控制台中看到有关sockts的有效负载:
但是当我使用socket.io和他们的emit事件时,我可以在实际有效载荷之前看到一些奇怪的数字。我明白颜色意味着你要么发送要么收到数据,但42, 3, 2, 430, 420, 5
这样的数字是什么意思。
是否有一个地方可以获得这些数字的完整列表以及描述?
生成它的代码有点大,所以我只发布小片段。
客户端总是这样:
socket.emit('joinC', room, function(color){ ... });
服务器端如下所示:
io.sockets.in(room).emit('moveS', {...});
答案 0 :(得分:8)
Websockets允许您通过全双工通信通道来回发送数据。
另一方面,Socket.IO是一个实时应用程序框架,它使用websockets作为传输添加功能,如命名空间连接,房间,回退到其他传输等。要构建所有这些功能,交换前后的消息必须包含一些语义以便Socket.IO知道它们的含义(即它是什么类型的消息,事件,错误等)以及如何处理它们。为此,它使用protocol来构造消息,其中包含一些识别其语义的代码。这就是你用这些数字看到的东西。不幸的是,Socket.IO文档非常简洁,很难准确理解这些代码是如何组合和解析的。为了得到它们的确切含义,我认为需要查看Socket.IO源代码。
来自socket.io Github issue的编辑:
这是在socket.io-parser和engine.io-parser中处理的,它们分别是socket.io-protocol和engine.io-protocol的实现。您可以找到socket.io here和engine.io here的协议说明。
在查看通过传输发送的实际数据时,这些文档中的编码部分很有用。 socket.io-protocol处理元数据的编码,例如enginepaes到engine.io-protocol可处理格式。
答案 1 :(得分:3)
我知道您前一阵子问过,但有关信息仍留给正在研究的人。
我对版本2.3.0(socket.io)和3.4.2(engine.io)中的逆向工程进行了分析,并得到了以下信息:
第一个数字是使用枚举器进行的engine.io通信类型:
键 | 值 |
---|---|
0 | “打开” |
1 | “关闭” |
2 | “ ping” |
3 | “傍” |
4 | “消息” |
5 | “升级” |
6 | “小睡” |
第二个数字是使用枚举器对socket.io的操作类型
键 | 值 |
---|---|
0 | “连接” |
1 | “断开连接” |
2 | “事件” |
3 | “ ACK” |
4 | “错误” |
5 | “ BINARY_EVENT” |
6 | “ BINARY_ACK” |
还有其他一些可以传递的可选信息,例如名称空间和ID,但我不会在那部分介绍。
使用这些代码后,他需要一个Json数组,其中索引0是事件的名称,索引1是参数。
因此,指令42["moveS",{"from":"g1", "to", "f3"}]
是engine.io(4)的消息,是socket.io(2)的事件,它将发出“ moveS”动作,将JSON {"from": "g1", "to", "f3"}
传递为参数(实际上是JSON.Parse({"from": "g1", "to", "f3"})
)。
希望这会有所帮助。 = D