socket.io 中的第二个 io.connection() 不会触发连接事件
second io.connection() in socket.io does not fire connect event
我需要灵活地更改客户端连接的服务器。因此,就我而言,客户端如果首先连接到服务器:
var $socket = io.connect("//serverA:5656");
这成功触发了事件代码:
$socket.on('connect', function(data) {
alert('socket connected with id ' + $socket.id);
});
但是,如果稍后在代码中我需要更改要连接的服务器:
$socket = io.connect("//serverB:8900");
即使 Connect 事件似乎生成了 $socket.id 的新值,但从服务器到此套接字的任何发出都不会通过,也不会触发 CONNECT
。我尝试了新服务器连接的几个选项,例如:
$socket.disconnect(true);
$socket = io.connect("//serverB:8900");
$socket.io.reconnect();
$socket.disconnect();
$socket.removeAllListeners('connect');
io.sockets = {};
$socket = io.connect("//serverB:8900");
$socket = io.connect("//serverB:8900", {'forceNew': true});
$socket = io.connect("//serverB:8900", {'force new connection': true});
这些(以及它们的任何组合)都没有成功。
io.connect
创建一个新的套接字对象。调用 io.connect("//serverA:5656")
时创建第一个套接字对象。然后,在该套接字上设置connect
事件侦听器。
当您调用 io.connect("//serverB:8900")
时,您将创建一个全新的套接字。这个新的套接字对象不知道您之前创建的第一个套接字的任何信息。重要的是,它没有connect
事件侦听器。
您需要在第二个套接字对象上再次调用.on('connect', ...)
,以使其也具有connection
侦听器。通常,每次调用io.connection
时,都需要对on
进行后续调用,以攻击connection
监听器。您可以将此操作放在单个函数中以使其更容易:
function makeSocketWithListener(server) {
var socket = io.connect(server);
socket.on("connect", function() {
alert('socket connected with id ' + socket.id);
});
return socket;
}
var $socket = makeSocketWithListener("//serverA:5656");
。
var $socket = makeSocketWithListener("//serverB:8900");
相关文章:
- 如何在 socket.io 连接房间
- socket.io 连接到特定终结点
- socket.io 连接时不会从服务器到客户端发出事件
- io.连接到特定的路径节点 js
- socket.io 连接事件不起作用,为什么
- 为什么我的代码会断开Node中的Socket.io连接
- Socket.io连接导致node.js服务器崩溃
- 套接字.IO连接没有发生
- 套接字.IO连接/断开奇怪的行为
- Express - Socket.IO连接不正常
- 用socket.io连接和断开连接有多复杂?
- 过期或时间限制套接字.node.js中的IO连接
- NodeJS + Socket.io连接事件处理程序未被成功调用
- 多个套接字.同一页面上的IO连接
- 使用相同的插座.io连接在多个HTML页面
- 有没有一种方法可以让桌面应用程序用socket.io连接到远程服务器?
- OAuth.io连接失败
- 从命令行伪造 socket.io 连接
- 如何与 Socket.io 连接一次
- 从互联网本地 Socket.io 连接