簡體   English   中英

Swift 套接字 io 客戶端無法連接到套接字 io nodejs 服務器

[英]Swift socket io client fail to connect to socket io nodejs server

我正在使用 v4 的 socket-io nodejs 服務器。 我正在使用 swift socket-io 客戶端的 v16。

static let manager = SocketManager(socketURL: URL(string: baseUrl)!, config: [.log(true), .compress])
 let socket: SocketIOClient? = manager.defaultSocket

然后在SwiftUI視圖的onAppear屬性中,我編寫了以下代碼

socket?.connect()
            
            
            socket?.on(clientEvent: .connect) {data, ack in
                print("socket connected")
            }
            
            socket?.on("userjoined", callback: { (data, ack) in
                debugPrint("here")
                debugPrint("\(data)")
                statusText = data[0] as? String ?? ""
            })
            
            socket?.on("receiveMessage", callback: { (data, ack) in
                debugPrint("here12")
                debugPrint("\(data)")
                let str = data[0] as! Dictionary<String, Any>
                viewModel.msgsList.append("\(String(describing: str["title"])) \(String(describing: str["email"]))")
            })
            
            socket?.on("disconnected", callback: { (data, ack) in
                debugPrint("here34")
                debugPrint("\(data)")
            })

我得到以下日志

022-05-03 15:41:56.587211+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting, 2]
2022-05-03 15:41:56.681857+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Joining namespace /
2022-05-03 15:41:56.684175+0530 ws-ios[18838:338830] LOG SocketManager: Tried connecting socket when engine isn't open. Connecting
2022-05-03 15:41:56.684517+0530 ws-ios[18838:338830] LOG SocketManager: Adding engine
2022-05-03 15:41:56.698649+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Adding handler for event: connect
2022-05-03 15:41:56.698744+0530 ws-ios[18838:339266] LOG SocketEngine: Starting engine. Server: https://MY_URL.com
2022-05-03 15:41:56.698994+0530 ws-ios[18838:339266] LOG SocketEngine: Handshaking
2022-05-03 15:41:56.699101+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Adding handler for event: userjoined
2022-05-03 15:41:56.699300+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Adding handler for event: receiveMessage
2022-05-03 15:41:56.699506+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Adding handler for event: disconnected
2022-05-03 15:41:56.706344+0530 ws-ios[18838:339266] LOG SocketEnginePolling: Doing polling GET https://MY_URL.com/socket.io/?transport=polling&b64=1&EIO=4
2022-05-03 15:41:58.570648+0530 ws-ios[18838:339267] [boringssl] boringssl_metrics_log_metric_block_invoke(153) Failed to log metrics
2022-05-03 15:41:58.622922+0530 ws-ios[18838:339267] [boringssl] boringssl_metrics_log_metric_block_invoke(153) Failed to log metrics
2022-05-03 15:41:58.933217+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Got polling response
2022-05-03 15:41:58.934444+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Got poll message: 0{"sid":"JD6xrLvEJvsDy233AAAO","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000,"maxPayload":1000000}
2022-05-03 15:41:58.937097+0530 ws-ios[18838:339267] LOG SocketEngine: Got message: 0{"sid":"JD6xrLvEJvsDy233AAAO","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000,"maxPayload":1000000}
2022-05-03 15:41:58.959116+0530 ws-ios[18838:338830] LOG SocketManager: Engine opened Connect
2022-05-03 15:41:58.959234+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Doing polling GET https://MY_URL.com/socket.io/?transport=polling&b64=1&EIO=4&sid=JD6xrLvEJvsDy233AAAO
2022-05-03 15:41:58.960781+0530 ws-ios[18838:339267] LOG SocketEngine: Writing poll: 0/, has data: false
2022-05-03 15:41:58.961072+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Sending poll: 0/, as type: 4
2022-05-03 15:41:58.963670+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Created POST string: 40/,
2022-05-03 15:41:58.966090+0530 ws-ios[18838:339267] LOG SocketEnginePolling: POSTing
2022-05-03 15:41:58.966287+0530 ws-ios[18838:339267] LOG SocketEnginePolling: Doing polling POST https://MY_URL.com/socket.io/?transport=polling&b64=1&EIO=4&sid=JD6xrLvEJvsDy233AAAO
2022-05-03 15:41:59.897212+0530 ws-ios[18838:339277] [boringssl] boringssl_metrics_log_metric_block_invoke(153) Failed to log metrics
2022-05-03 15:41:59.902511+0530 ws-ios[18838:339277] [boringssl] boringssl_metrics_log_metric_block_invoke(153) Failed to log metrics
2022-05-03 15:42:00.362048+0530 ws-ios[18838:339283] LOG SocketEnginePolling: Got polling response
2022-05-03 15:42:00.362379+0530 ws-ios[18838:339283] LOG SocketEnginePolling: Got poll message: 40{"sid":"m_m3eV5SRygPv4inAAAP"}
2022-05-03 15:42:00.362691+0530 ws-ios[18838:339283] LOG SocketEngine: Got message: 40{"sid":"m_m3eV5SRygPv4inAAAP"}
2022-05-03 15:42:00.363351+0530 ws-ios[18838:339283] LOG SocketEnginePolling: Doing polling GET https://MY_URL.com/socket.io/?transport=polling&b64=1&EIO=4&sid=JD6xrLvEJvsDy233AAAO
2022-05-03 15:42:00.363967+0530 ws-ios[18838:338830] LOG SocketParser: Parsing 0{"sid":"m_m3eV5SRygPv4inAAAP"}
2022-05-03 15:42:00.370844+0530 ws-ios[18838:338830] LOG SocketParser: Decoded packet as: SocketPacket {type: 0; data: [{
    sid = "m_m3eV5SRygPv4inAAAP";
}]; id: -1; placeholders: -1; nsp: /}
2022-05-03 15:42:00.371973+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Socket connected
2022-05-03 15:42:00.372224+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Handling event: statusChange with data: [connected, 3]
2022-05-03 15:42:00.378048+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Handling event: connect with data: ["/", ["sid": m_m3eV5SRygPv4inAAAP]]
2022-05-03 15:42:00.378370+0530 ws-ios[18838:339283] LOG SocketEngineWebSocket: Sending ws: probe as type: 2
socket connected
2022-05-03 15:42:00.381198+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Handling event: websocketUpgrade with data: [["Sec-WebSocket-Accept": "hO9PSta7ypMVlBDHEuYM6iZRCD4=", "Connection": "Upgrade", "Upgrade": "websocket", "Via": "1.1 vegur"]]
2022-05-03 15:42:00.618775+0530 ws-ios[18838:339266] LOG SocketEngine: Got message: 3probe
2022-05-03 15:42:00.619336+0530 ws-ios[18838:339266] LOG SocketEngine: Received probe response, should upgrade to WebSockets
2022-05-03 15:42:00.619731+0530 ws-ios[18838:339266] LOG SocketEngine: Upgrading transport to WebSockets
2022-05-03 15:42:00.620094+0530 ws-ios[18838:339266] LOG SocketEnginePolling: Sending poll:  as type: 6
2022-05-03 15:42:00.620489+0530 ws-ios[18838:339266] LOG SocketEnginePolling: Created POST string: 6
2022-05-03 15:42:00.621049+0530 ws-ios[18838:339266] LOG SocketEnginePolling: POSTing
2022-05-03 15:42:00.621621+0530 ws-ios[18838:338830] LOG SocketIOClient{/}: Handling event: pong with data: []
2022-05-03 15:42:00.723890+0530 ws-ios[18838:339277] LOG SocketEnginePolling: Got polling response
2022-05-03 15:42:00.724828+0530 ws-ios[18838:339277] LOG SocketEnginePolling: Got poll message: 6
2022-05-03 15:42:00.725858+0530 ws-ios[18838:339277] LOG SocketEngine: Got message: 6
2022-05-03 15:42:00.726999+0530 ws-ios[18838:339277] LOG SocketEngine: Switching to WebSockets
2022-05-03 15:42:00.727463+0530 ws-ios[18838:339277] LOG SocketEngineWebSocket: Sending ws:  as type: 5
2022-05-03 15:42:00.727999+0530 ws-ios[18838:339277] LOG SocketEngine: Flushing probe wait

服務器端絕對沒有問題,因為我們的 web 應用程序使用reactjs和用於 web 的socket-io client庫能夠連接到服務器並傳遞消息。 我無法弄清楚到底出了什么問題。

我最近偶然發現了這個問題。 我在服務器上使用 socket.io ^4.4.1。 但是文檔中沒有提到如何與v4服務器連接,並且兼容性頁面沒有加載,所以我進一步挖掘。

我發現“socket.io-client-swift”發布版本是 15,而 16 可能仍在開發中。

這個兼容性表源代碼,其中版本 15 需要第 1 節和第 2 節。我需要添加服務器和客戶端配置才能使其工作。

如果您的 baseURL 包含命名空間,那么這是命名空間問題,您必須將其放入套接字命名空間,如下所示:

let socket = socketManager.socket(forNamespace: "/yourUrlNamespace")

他們沒有在 socket.io-client-swift 文檔中提到命名空間和域標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM