根据列表的条件,我有两个客户端连接,而Server有两个具有不同端口和不同握手路径的服务器套接字,以便客户端轻松连接。
服务器:
Name | Port | Handshake path
Socket A | 3001 | /one
Socket B | 3002 | /two因此,在从颤振应用程序连接时,无论首先打开哪个listItem,都会建立与指定握手路径的连接。
Items | HandshakePath
Item1 | /one
Item2 | /two
Item3 | /one对于上面的场景,当我单击第1项时,它会使服务器上的/one套接字连接正常,但是在单击Item2之后,它仍然在/one路径上创建连接,反之亦然,无论先建立哪种连接,保持连接并重叠第二个连接。
连接类别1
Class One{
IO.Socket _socket;
connect(){
_socket = IO.io(
deployment ? _serverIP : SERVER_ONE,
IO.OptionBuilder()
.setTransports([
'websocket'
])
.setQuery({
"info": _fromUser,
})
.setPath(deployment ? "/one" : "/socket.io")
.disableAutoConnect()
.build());
}
}连接类别2
Class Two{
IO.Socket _socket;
connect(){
_socket = IO.io(
deployment ? _serverIP : SERVER_TWO,
IO.OptionBuilder()
.setTransports([
'websocket'
])
.setQuery({
"user1": _fromUser1,
"user2": _fromUser2,
})
.setPath(deployment ? "/two" : "/socket.io")
.disableAutoConnect()
.build());
}
}与本地服务器的连接非常好,我想是因为ENV变量中提到的不同端口,但是在服务器上,我已经根据路径设置了路由转发到不同的端口。
发布于 2022-03-08 12:12:13
在社区的帮助下,我找到了解决方案。
当我们使用socket_io_client创建第一个套接字客户端连接时,我们提供的任何选项生成器值都将在我们将要创建的每个实例中使用,即使我们提供了不同的值,它将只使用以前的值。在这种情况下,
我们必须使用enableForceNew()方法来提供不同的值。
_socket = IO.io(
deployment ? _serverIP : SERVER_TWO,
IO.OptionBuilder()
.enableForceNew() // <--- this method
.setTransports([
'websocket'
])
.setQuery({
"user1": _fromUser1,
"user2": _fromUser2,
})
.setPath(deployment ? "/two" : "/socket.io")
.disableAutoConnect()
.build());https://stackoverflow.com/questions/71349813
复制相似问题