繁体   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