Socket.io“连接”事件射击每一个客户的心跳?(Socket.io “connection”

2019-06-25 15:39发布

我有一个基本的Socket.io服务器设置是这样的:

var server = express.createServer().listen(port);
    this.io = socketIO.listen(server);

this.io.sockets.on('connection', function(socket){
        initSocket(socket);
    });

我也有socket.io配置为使用XHR轮询像这样:

io.set("transports", ["xhr-polling"]);
io.set("close timeout", 3);
io.set("heartbeat interval", 2); 

问题是每个客户端发送心跳(每2秒)时,“连接”事件被烧制。 是否有不同的事件,我可以使用,这将触发每一个插座初始连接时一次?

我将使用“授权”事件,但只有通过在握手对象不实际的插座。

Answer 1:

发现这个问题。 我有我的XHR“轮询时间”设置为Heroku的建议10S像这样:

io.set("polling duration", 10);

这意味着客户不仅使每10秒(只要先前请求返回)一个新的XHR请求。 同时,我不得不“关闭超时”设置为3秒:

io.set("close timeout", 3);

这如果服务器没有从客户机装置3并以秒为它的最后一个请求关闭连接,因此不断“断开/连接”事件被解雇内听到的意思。

解决的办法是设置关闭超时比轮询时间更高。 这似乎是“心跳间隔”不相关XHR连接。



Answer 2:

你设置closetimeout和心跳间隔值太低。 这些默认值是60秒和25秒。 典型的网络滞后是5秒的数量级。 因此,与您所设置的值,客户端不会在指定的时间内响应,所以连接被关闭。 当客户端再次进行连接,连接事件被激发。



文章来源: Socket.io “connection” event fired on every client heartbeat?