【问题标题】:Swift socket io client fail to connect to socket io nodejs serverSwift socket io客户端无法连接到socket io nodejs服务器
【发布时间】:2022-09-27 10:36:03
【问题描述】:

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

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

服务器端绝对没有问题,因为我们使用reactjssocket-io client 网络库的网络应用程序能够连接到服务器并传递消息。 我无法弄清楚到底出了什么问题。

  • 你找到任何解决方案了吗?
  • @balkaransingh 不,我放弃了,因为这是一个 POC 项目

标签: ios node.js swift socket.io


【解决方案1】:

我最近偶然发现了这个问题。我在服务器上使用 socket.io ^4.4.1。但是文档中没有提到如何与v4服务器连接,并且兼容性页面没有加载,所以我进一步挖掘。

我发现“socket.io-client-swift”发布版本是 15,而 16 可能仍在开发中。

this 兼容性表源代码,其中,第 1 节和第 2 节是第 15 版所必需的。我需要添加服务器和客户端配置才能使其工作。

【讨论】:

    【解决方案2】:

    如果您的 baseURL 包含命名空间,那么这是命名空间问题,您必须将其放入套接字命名空间,如下所示:

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

    他们没有在 socket.io-client-swift 文档中提到命名空间和域标准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2021-09-14
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多