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 页面中创建问题。