这些数字在socket.io有效载荷中意味着什么?

时间:2014-07-03 23:52:58

标签: websocket socket.io socket.io-1.0

当我使用原生websocket API时,我只能在Chrome控制台中看到有关sockts的有效负载: enter image description here

但是当我使用socket.io和他们的emit事件时,我可以在实际有效载荷之前看到一些奇怪的数字。我明白颜色意味着你要么发送要么收到数据,但42, 3, 2, 430, 420, 5这样的数字是什么意思。

是否有一个地方可以获得这些数字的完整列表以及描述?

enter image description here

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

客户端总是这样:

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

服务器端如下所示:

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

2 个答案:

答案 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