Socket.io - 收到意外数据
Socket.io - unexpected data received
所以,我进行了广泛的搜索,但未能找到答案。我目前正在使用 typescript(v2.8.3) 和 react.js(v16.4.0) 开发一个应用程序,它使用 socket.io 客户端 (v2.1.0) 连接到烧瓶服务器。每 运行 一次,我收到的数据看起来像是从服务器实际发送的数据
但复制了多次。我为特定消息创建了处理程序,如下所示:
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 log
我的处理程序正在记录每个数组中有近 30 个值的消息,它们看起来像是先前收到的值的乘积。在这里你可以看到图片:
logged object
如您所见,主要部分包含与之前相同的值,但重复了 20-30 次。会不会是收到回复后未确认消息的问题?
我要回答我自己的问题:
问题是由于在一个地方注册了太多的事件处理程序引起的。当时我有一个维护 5 个事件处理程序的组件,在分成 3 个独立的组件后,我终于摆脱了意外数据。仍然不知道错误的来源,将尝试调查并在 socket.io github 页面中创建问题。
所以,我进行了广泛的搜索,但未能找到答案。我目前正在使用 typescript(v2.8.3) 和 react.js(v16.4.0) 开发一个应用程序,它使用 socket.io 客户端 (v2.1.0) 连接到烧瓶服务器。每 运行 一次,我收到的数据看起来像是从服务器实际发送的数据 但复制了多次。我为特定消息创建了处理程序,如下所示:
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 log
我的处理程序正在记录每个数组中有近 30 个值的消息,它们看起来像是先前收到的值的乘积。在这里你可以看到图片:
logged object
如您所见,主要部分包含与之前相同的值,但重复了 20-30 次。会不会是收到回复后未确认消息的问题?
我要回答我自己的问题: 问题是由于在一个地方注册了太多的事件处理程序引起的。当时我有一个维护 5 个事件处理程序的组件,在分成 3 个独立的组件后,我终于摆脱了意外数据。仍然不知道错误的来源,将尝试调查并在 socket.io github 页面中创建问题。