gpt4 book ai didi

javascript - Websocket 间隔 : performance problems on mobile devices?

转载 作者:行者123 更新时间:2023-11-30 06:30:04 25 4
gpt4 key购买 nike

在我当前的项目中,我发现在移动设备上使用带有 socket.io 和 node.js 的 websockets 时存在问题。移动端处理socket消息的时间间隔好像有问题。

我将它简化为一个最小的场景:

服务器(最小的 express.js 服务器)以特定的时间间隔向客户端发送消息:

setInterval(function(){
socket.emit('interval');
}, 500);

客户端只是确定接收消息之间的时间并显示它们:

socket.on('interval', function (data) {
timeElement.html(new Date() - startTime);
startTime = new Date();
});

桌面(使用 Chrome)上,消息之间的结果时间非常稳定在 515 毫秒。所以它像 15 毫秒的延迟,但消息间隔是一致的。

移动设备(我使用的是带 Chrome 的 Galaxy Nexus)上,时间变化在 400 到 600 毫秒之间,其中任何一种方式都有一些更极端的尖峰。

我想使用这样的间隔作为游戏转向指示器,这个问题会导致移动设备上的玩家移动出现大量滞后和不均匀现象。

最佳答案

您无法保证网络数据包何时到达您的手中。如果您没有使用像 TCP 这样的可靠协议(protocol),您将无法确定数据包是否会到达您的手中。有时数据包会被丢弃。

碰巧,您正在使用 TCP(这是 WebSockets 的底层网络级协议(protocol))。当 TCP 数据包丢失时,网络必须识别丢失,然后重新发送数据包,从而造成延迟。移动设备的物理网卡可能比桌面上的物理网卡更容易丢包。

网络消息间隔是可靠计时的糟糕机制。

另一个——或额外的——可能的解释(如果你怀疑数据包丢失的可能性不大)是在如此低功率的移动设备上,网络驱动程序根本没有在 CPU 上获得足够的时间(或者没有足够快地获得其 CPU 时间),因此在处理物理网络设备上接收到的数据包队列时存在驱动程序级延迟。

关于javascript - Websocket 间隔 : performance problems on mobile devices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com