Socket.io - 收到意外数据



所以,我一直在四处寻找,但一直找不到答案。我目前正在开发一个带有 typescript(v2.8.3( 和 react.js(v16.4.0( 的应用程序,它使用客户端(v2.1.0( 连接到 flask 服务器 socket.io。 每次运行一次,我都会收到看起来像实际从服务器发送的数据的数据 但多次复制。我已经为特定消息创建了处理程序,如下所示:

this.props.socket.on("some_message", this.handleSomeMessage);
private handleSomeMessage = (message: any) => {
console.log(message);
this.setState({data: message.diff});
};

我记录了从服务器端的服务器发送的请求:

if self.key_to_event_dict[key] == "some_message":
with open("sent.txt", "a") as f:
json.dump(diff_obj, f)
self.socketio.emit(
self.key_to_event_dict[key],
diff_obj
)

以下是从服务器端记录的差异:

[{
"diff": {
"main": {
"values": [[0],[11.66],[9.82],[10.707500000000001], [0.8743962202571556]],
"labels": ["gen", "max", "min", "avg", "std"]
},
"fp": {
"values": [[], [], [], [], []],
"labels": ["gen", "max", "min", "avg", "std"]
}
}
},{
"diff": {
"main": {
"values": [[], [], [], [], []],
"labels": ["gen", "max", "min", "avg", "std"]
},
"fp": {
"values": [[], [1.539999999999999], [0.570000000000000], 
[0.832500000000000], [0.40880160224734857]],
"labels": ["gen", "max", "min", "avg", "std"]
}
}
},
{
"diff": {
"main": {
"values": [[1], [15.32], [8.92], [10.8175], [2.61861007979424]],
"labels": ["gen", "max", "min", "avg", "std"]
},
"fp": {
"values": [[], [], [], [], []
],
"labels": ["gen", "max", "min", "avg", "std"]
}
}
},
{
"diff": {
"main": {
"values": [[2], [15.32], [9.23], [11.037500000000001], 
[2.4834288292600615]],
"labels": ["gen", "max", "min", "avg", "std"]
},
"fp": {
"values": [[1, 2], [1.5399999999999991, 0.6100000000000012], 
[0.5700000000000003, 0.5700000000000003], [0.8325000000000005, 
0.600000000000001], [0.40880160224734857, 0.017320508075689172]],
"labels": ["gen", "max", "min", "avg", "std"]
}
}
},
{
"diff": {
"main": {
"values": [[3], [16.75], [9.23], [14.155000000000001], 
[2.9027616161166248]],
"labels": ["gen", "max", "min", "avg", "std" ]
},
"fp": {
"values": [[], [], [], [], []],
"labels": ["gen", "max", "min", "avg", "std" ]
}
}
},
{
"diff": {
"main": {
"values": [[], [], [], [], [],[]],
"labels": ["gen", "max", "min", "avg", "std"]
},
"fp": {
"values": [[3], [0.6100000000000012], [0.5700000000000003], [0.5900000000000007], [0.020000000000000462]
],
"labels": ["gen", "max", "min", "avg", "std"]
}
}
}
]

如您所见,每条消息中最多返回 2 个值。但是,在客户端内读取此消息时:

Socket.io 日志

我的处理程序正在记录每个数组中具有近 30 个值的消息,它们看起来像是以前收到的值的乘法。在这里你可以看到图片:

记录的对象

如您所见,主要部分包含与以前相同的值,但复制了 20-30 次。收到回复后消息未确认会不会有问题?

我将回答我自己的问题: 该问题是由于在一个位置注册太多事件处理程序引起的。当时我有一个维护 5 个事件处理程序的组件,在分成 3 个单独的组件后,我终于摆脱了意外数据。仍然不知道错误的根源,将尝试调查并在 socket.io github页面中创建问题。

最新更新