gpt4 book ai didi

javascript - Socket.IO:重新连接导致服务器连接代码运行两次

转载 作者:行者123 更新时间:2023-11-30 00:32:58 28 4
gpt4 key购买 nike

每当我使用 socket.disconnect(); 断开连接然后使用 socket.connect(); 重新连接时,服务器会运行我的握手代码两次。奇怪的是,即使服务器连接代码运行了两次,但重新连接后我的数组中只有一个连接。这种情况发生在意外断开连接、有意断开连接或服务器重新启动时。一些代码:

io.on('connection', OnConnect);
function OnConnect(socket) {

var connection = { socket: socket, realIp: ip, token: GenerateConnToken() };
connections.push(connection);
console.log('Connected');

// Client will respond to this by emitting "client-send-info".
// This is emitted once on initial connect, but twice on reconnect.
socket.emit('acknowledge', connection.token);

socket.on('client-send-info', function() {

console.log('Client Sent Info');
});

socket.on('disconnect', function() {
console.log('Disconnected');
});
}

以上代码,当客户端连接、断开、重连一次时,会产生如下日志:

Connected

Client Sent Info

Disconnected

Connected

Client Sent Info

Client Sent Info

为什么重连时,连接代码会运行两次,但只创建一个连接对象?

编辑:经过进一步检查,当客户端重新连接时,我的连接代码似乎被执行了两次。更新以上代码以反射(reflect)相关信息。

最佳答案

奇怪的是,解决方案完全是客户端。而不是下面的代码:

var socket = io.connect();
socket.on('connect' function() {
socket.on('acknowledge', function() {

});
});

你必须使用:

var socket = io.connect();
socket.on('connect' function() {

});

socket.on('acknowledge', function() {

});

否则,服务器实际上只发送一个时,看起来会发送多个,而实际上是客户端错误地接收了多个。使用第二种代码格式,客户端成功地初始连接、断开连接和重新连接,而没有收到多次发射。

简单地说,不要在 on('connection') 调用中放置任何额外的 socket.on('x') 调用。将它们全部留在外面。

关于javascript - Socket.IO:重新连接导致服务器连接代码运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510994/

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