根據串列的條件,我有兩個客戶端連接,并且服務器有兩個服務器套接字,它們具有不同的埠和不同的握手路徑,以便客戶端輕松連接。
服務器 :
Name | Port | Handshake path
Socket A | 3001 | /one
Socket B | 3002 | /two
因此,在從顫振應用程式連接時,無論我首先打開哪個 listItem,都會建立與指定握手路徑的連接。
Items | HandshakePath
Item1 | /one
Item2 | /two
Item3 | /one
對于上述情況,當我單擊 Item 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 變數中提到的不同埠,但是在服務器上,我已經根據路徑設定了到不同埠的路由轉發。
uj5u.com熱心網友回復:
在不和諧社區的幫助下,我找到了可行的解決方案。
當我們使用 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://www.uj5u.com/net/442992.html
下一篇:System.AggregateException:發生一個或多個錯誤。.NetCore6中的(未知套接字錯誤)
