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

Sal*_*ali 12 websocket socket.io socket.io-1.0

当我使用本机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', {...});

Mr.*_*rus 20

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

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

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

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

第二个数字是 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)的事件,它将发出“moveS”动作,将JSON{"from": "g1", "to", "f3"}作为参数传递(实际上JSON.Parse({"from": "g1", "to", "f3"}))。

希望这可以帮助。=D


Bog*_*dan 8

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

另一方面,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处理元数据的编码,如enginepaes到engine.io-protocol可处理格式.