gpt4 book ai didi

javascript - Socket.io 随机断开连接 (v1.0.6)

转载 作者:IT老高 更新时间:2023-10-28 23:06:33 24 4
gpt4 key购买 nike

我正在使用最新版本的 socket.io (1.0.6) 使用 Phaser 和 Node 制作在线多人游戏。我的问题是,一旦客户端连接,他们偶尔会随机断开连接。似乎没有发生这种情况的特定情况。有时是在游戏完全空闲时,有时是在所有玩家向服务器发送输入时。

通过检查 socket.io 的调试输出,我发现断开连接的原因是“ping 超时”。具体来说,从 socket.js 库文件中触发了以下行:

Socket.prototype.setPingTimeout = function () {
var self = this;
clearTimeout(self.pingTimeoutTimer);
self.pingTimeoutTimer = setTimeout(function () {
self.onClose('ping timeout'); // <------------------------
}, self.server.pingInterval + self.server.pingTimeout);
};

发生这种情况是有原因的吗?我只是在本地主机上测试我的服务器,所以我没有理由认为会有任何明显的延迟导致超时。我的套接字设置符合 socket.io 网站上的聊天应用示例:

服务器:

//http server setup
var io = require('socket.io')(http);
io.on('connection', function(socket){
//Game logic,socket listeners, io.emits
});

客户:

var socket = io();
//client side listeners, emissions back to server

我的问题首先是我会间歇性地获得 ping 超时的可能原因是什么?其次,我有什么办法可以将超时时间设置得更长/更短,以测试这如何影响我获得的断开连接的频率?

最佳答案

很遗憾,您无法使用 socket.io 修改 ping 间隔,如果您使用核心库 (engine.io) 则可以。


感谢 Paweł Wszoła 指出正确答案。根据 socket.io 上的文档:

The same options passed to socket.io are always passed to the engine.io Server that gets created.

因此您可以通过将它们作为参数传递来设置引擎的 ping 超时和间隔。

require('socket.io').listen(app, { pingTimeout: 4000, pingInterval: 4000 });

关于javascript - Socket.io 随机断开连接 (v1.0.6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402512/

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