我有一个socket.io的大问题,这使我的实时游戏无法播放。
我希望我的node.js服务器每隔20ms向每个连接的客户端(每个套接字)发送数据
但是我注意到客户端没有每20毫秒收到一次,它每100到200毫秒收到几个。这使得游戏完全无法播放(非常大的滞后)
在当地它的效果非常好。
你能帮帮我吗? 这是我的函数的一段代码,它发送数据(服务器端):function sendData()
{
playersList.forEach( (player) =>
{
let data = [];
// code which add data to "data" variable
socketsList[player.id].emit('refreshGame', JSON.stringify(data));
});
setTimeout(sendData, 20);
}
sendData();
答案 0 :(得分:0)
这是因为存在一些网络瓶颈。这是因为:
要缓解,请尝试optimize sending packets,IE仅发送所需的数据。例如,如果我有一个带有移动和非移动组件的游戏,即使您可能多次发送移动组件,也只发送一次非移动组件。
另一种选择是诊断网络,这超出了此stackoverflow问题的范围。
然而,虽然这些是事实"但是根据我自己的经验,有一些非传统的或小的调整似乎可以解决这个问题。
另外,请确保socketsList[player.id]
是播放器的实际套接字。如果你在某个时候使用socketsList.splice,它会使索引陷入混乱,使得它将数据包发送给错误的客户端。