简体   繁体   English

Socket.io 与 Swift 不握手

[英]Socket.io with Swift is not handshaking

I'm trying to integrate iOS app with Node.js WebSocket Server.我正在尝试将 iOS 应用程序与 Node.js WebSocket 服务器集成。 I'm using SwiftUI for the iOS and socket.io for both server and client.我将 SwiftUI 用于 iOS 和 socket.io 用于服务器和客户端。

But it when I am trying to connect the iOS app with the server, It seems to not connect with the server.但是当我尝试将 iOS 应用程序与服务器连接时,它似乎没有与服务器连接。

I tested if the server is running by connecting a React app to the Node.js server and the connection is working just fine with the browser.我通过将 React 应用程序连接到 Node.js 服务器来测试服务器是否正在运行,并且连接在浏览器上运行良好。

I've checked the swift logs and It seems trying to handshake with the server but, it starts long polling so I'm guessing the handshaking process has some kinda issue.我检查了 swift 日志,它似乎试图与服务器握手,但是它开始长时间轮询,所以我猜测握手过程有一些问题。

I'm console logging "new connection" as a string in Node.js server if there is a new connection and, it's working fine for React but not Swift.如果有新连接,我将控制台记录“新连接”作为 Node.js 服务器中的字符串,并且它适用于 React 但不适用于 Swift。

But I'm not trying anything advance so I can't find out what is wrong.但是我没有尝试任何事情,所以我无法找出问题所在。

Can someone help me out pls?有人可以帮我吗?

import SwiftUI
import SocketIO

final class Service: ObservableObject {
    private var manager = SocketManager(socketURL:URL(string: "http://localhost:5000")!, config: [.log(true), .compress])
    
    init() {
        let socket = manager.defaultSocket
        socket.on(clientEvent: .connect)  { (data,act) in
            print("Connected")
        }
        socket.connect()
    }
}

struct SocketIO: View {
    @ObservedObject var service = Service()
    var body: some View {
        Text("Hello, Web socket!")
    }
}

This is the log I'm getting from SocketIO-client-swift这是我从 SocketIO-client-swift 得到的日志

2020-12-18 13:08:24.033132+0900 Tests[4397:171225] LOG SocketIOClient{/}: Adding handler for event: connect 2020-12-18 13:08:24.033663+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting, 2] 2020-12-18 13:08:24.033811+0900 Tests[4397:171225] LOG SocketIOClient{/}: Joining namespace / 2020-12-18 13:08:24.033930+0900 Tests[4397:171225] LOG SocketManager: Tried connecting socket when engine isn't open. 2020-12-18 13:08:24.033132+0900 测试[4397:171225] LOG SocketIOClient{/}:添加事件处理程序:连接 2020-12-18 13:08:24.033663+0900 测试[4397:171225] LOG SocketIOClient {/}:处理事件:statusChange with data:[connecting, 2] 2020-12-18 13:08:24.033811+0900 Tests[4397:171225] LOG SocketIOClient{/}:加入命名空间/2020-12-18 13: 08:24.033930+0900 测试 [4397:171225] LOG SocketManager:在引擎未打开时尝试连接套接字。 Connecting 2020-12-18 13:08:24.034033+0900 Tests[4397:171225] LOG SocketManager: Adding engine 2020-12-18 13:08:24.035507+0900 Tests[4397:171427] LOG SocketEngine: Starting engine.连接 2020-12-18 13:08:24.034033+0900 测试[4397:171225] LOG SocketManager:添加引擎 2020-12-18 13:08:24.035507+0900 测试[4397:171427] LOG SocketEngine:启动引擎。 Server: http://localhost:5000 2020-12-18 13:08:24.035608+0900 Tests[4397:171427] LOG SocketEngine: Handshaking 2020-12-18 13:08:24.038113+0900 Tests[4397:171427] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1 2020-12-18 13:08:24.125554+0900 Tests[4397:171431] [] nw_protocol_get_quic_image_block_invoke dlopen libquic failed 2020-12-18 13:08:24.166652+0900 Tests[4397:171427] LOG SocketEnginePolling: Got polling response 2020-12-18 13:08:24.166801+0900 Tests[4397:171427] LOG SocketEnginePolling: Got poll message: 0{"sid":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.168076+0900 Tests[4397:171427] LOG SocketEngine: Got message: 0{"sid":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.171813+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: ping 服务器:http://localhost:5000 2020-12-18 13:08:24.035608+0900 测试[4397:171427] LOG SocketEngine:握手 2020-12-18 13:08:2270 测试[438113+7104]LOG338113+794 SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1 2020-12-18 13:08:24.125554+0900 Tests[4397:171431] [] nw_protocol_get_quic_image_block_invoke dlopen libquic failed 2020-12 -18 13:08:24.166652+0900 测试[4397:171427] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.166801+0900 测试[4397:171427] LOG SocketEnginePolling:得到轮询消息:0{"sid ":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.168076+0900 测试[4397:171427] LOG SocketEngine: Got消息:0{"sid":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.171813+0900 测试[4397: 171225] LOG SocketIOClient{/}:处理事件:ping with data: [] 2020-12-18 13:08:24.171845+0900 Tests[4397:171427] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.172148+0900 Tests[4397:171225] LOG SocketManager: Engine opened Connect 2020-12-18 13:08:24.172267+0900 Tests[4397:171225] LOG SocketIOClient{/}: Socket connected 2020-12-18 13:08:24.172485+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: statusChange with data: [connected, 3] 2020-12-18 13:08:24.172704+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: connect with data: ["/"] Connected 2020-12-18 13:08:24.174125+0900 Tests[4397:171427] LOG SocketEngine: Writing poll: has data: false 2020-12-18 13:08:24.174260+0900 Tests[4397:171427] LOG SocketEnginePolling: Sending poll: as type: 2 2020-12-18 13:08:24.174607+0900 Tests[4397:171427] LOG SocketEnginePolling: Created POST string: 1:2 2020-12-18 13:08:24.175188+0900 Tests[4397有数据:[] 2020-12-18 13:08:24.171845+0900 测试[4397:171427] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b6604=1&ZuRlfHAAAAFb6604=1&ZuRlfHAAAAFb7 -12-18 13:08:24.172148+0900 测试[4397:171225] LOG SocketManager:引擎打开连接 2020-12-18 13:08:24.172267+0900 测试[4397:171225] LOG SocketIOClient{/}:套接字已连接 2020 -12-18 13:08:24.172485+0900 测试[4397:171225] LOG SocketIOClient{/}:处理事件:statusChange 与数据:[已连接,3] 2020-12-18 13:08:24.172704+0900 测试[4397 :171225] LOG SocketIOClient{/}:处理事件:使用数据连接:["/"] 已连接 2020-12-18 13:08:24.174125+0900 测试 [4397:171427] LOG SocketEngine:写入轮询:有数据:false 2020-12-18 13:08:24.174260+0900 测试[4397:171427] LOG SocketEnginePolling:发送轮询:作为类型:2 2020-12-18 13:08:24.174607+0900 测试[4397:171427] LOG SocketEnginePolling:已创建POST 字符串:1:2 2020-12-18 13:08:24.175188+0900 测试[4397 :171427] LOG SocketEnginePolling: POSTing 2020-12-18 13:08:24.175708+0900 Tests[4397:171427] LOG SocketEnginePolling: Doing polling POST http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.181566+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: websocketUpgrade with data: [["upgrade": "websocket", "connection": "Upgrade", "sec-websocket-accept": "DK4ZA/luKjOL11P+2vm4APQNE5I="]] 2020-12-18 13:08:24.181780+0900 Tests[4397:171429] LOG SocketEngineWebSocket: Sending ws: probe as type: 2 2020-12-18 13:08:24.183557+0900 Tests[4397:171431] LOG SocketEnginePolling: Got polling response 2020-12-18 13:08:24.183723+0900 Tests[4397:171431] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.184529+0900 Tests[4397:171427] LOG SocketEngine: Flushing probe wait 2020-12-18 13:08:24.186620 :171427] LOG SocketEnginePolling: POSTing 2020-12-18 13:08:24.175708+0900 Tests[4397:171427] LOG SocketEnginePolling: Doing polling POST http://localhost:5000/socket.io/? 97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.181566+0900 测试[4397:171225] LOG SocketIOClient{/}:处理事件:websocketUpgrade with data: [["upgrade": "websocket", "connection": "Upgrade", “sec-websocket-accept”:“DK4ZA/luKjOL11P+2vm4APQNE5I="]] 2020-12-18 13:08:24.181780+0900 测试[4397:171429] LOG SocketEngineWebSocket: 发送 ws: 探测类型: 2 2020-12 -18 13:08:24.183557+0900 测试[4397:171431] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.183723+0900 测试[4397:171431] LOG SocketEnginePolling:进行轮询 GET Z80791B3AE7002FACB8888 :5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.184529+0900 测试[4397:171427] LOG SocketEngine: Flushing probe wait 2020-12-18 13:08:24.186620 +0900 Tests[4397:171428] ERROR SocketEnginePolling: Error during long poll request 2020-12-18 13:08:24.186736+0900 Tests[4397:171428] ERROR SocketEngine: Error 2020-12-18 13:08:24.186892+0900 Tests[4397:171225] ERROR SocketManager: Error 2020-12-18 13:08:24.186907+0900 Tests[4397:171428] LOG SocketEngine: Engine is being closed. +0900 测试 [4397:171428] 错误 SocketEnginePolling:长轮询请求期间出错 2020-12-18 13:08:24.186736+0900 测试 [4397:171428] 错误 SocketEngine:错误 2020-12-18 13:08:24.186892+0900测试 [4397:171225] 错误 SocketManager:错误 2020-12-18 13:08:24.186907+0900 测试 [4397:171428] 日志 SocketEngine:引擎正在关闭。 2020-12-18 13:08:24.187029+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: error with data: ["Error"] 2020-12-18 13:08:24.187306+0900 Tests[4397:171428] LOG SocketEnginePolling: Created POST string: 1:1 2020-12-18 13:08:24.187548+0900 Tests[4397:171428] LOG SocketEnginePolling: Doing polling POST http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.188161+0900 Tests[4397:171225] LOG SocketManager: Starting reconnect 2020-12-18 13:08:24.188342+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting, 2] 2020-12-18 13:08:24.188558+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: reconnect with data: ["Error"] 2020-12-18 13:08:24.188729+0900 Tests[4397:171225] LOG SocketManager: Trying to reconnect 2020-12-18 13:08:24.188830+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: reconnectAttempt with data: [-1] 2020-12-18 13:08:24.18 2020-12-18 13:08:24.187029+0900 测试[4397:171225] LOG SocketIOClient{/}:处理事件:数据错误:[“错误”] 2020-12-18 13:08:24.187306+0900 测试[ 4397:171428] LOG SocketEnginePolling:创建的 POST 字符串:1:1 2020-12-18 13:08:24.187548+0900 测试[4397:171428] LOG SocketEnginePolling:正在轮询 POST http://localhost: ?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.188161+0900 测试[4397:171225] LOG SocketManager:开始重新连接 2020-12-18 13:08:24.188342+0900 测试]LOG:1727 SocketIOClient{/}:处理事件:statusChange with data: [connecting, 2] 2020-12-18 13:08:24.188558+0900 Tests[4397:171225] LOG SocketIOClient{/}:处理事件:reconnect with data: ["错误”] 2020-12-18 13:08:24.188729+0900 测试[4397:171225] LOG SocketManager:尝试重新连接 2020-12-18 13:08:24.188830+0900 测试[4397:171225] LOG SocketIOClient{/} :处理事件:reconnectAttempt with data:[-1] 2020-12-18 13:08:24.18 9043+0900 Tests[4397:171429] LOG SocketEngine: Starting engine. 9043+0900 测试[4397:171429] LOG SocketEngine:启动引擎。 Server: http://localhost:5000 2020-12-18 13:08:24.189113+0900 Tests[4397:171225] LOG SocketManager: Scheduling reconnect in 15.068159317825785s 2020-12-18 13:08:24.189439+0900 Tests[4397:171429] LOG SocketEngine: Handshaking 2020-12-18 13:08:24.189732+0900 Tests[4397:171429] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1 2020-12-18 13:08:24.197564+0900 Tests[4397:171432] LOG SocketEnginePolling: Got polling response 2020-12-18 13:08:24.197690+0900 Tests[4397:171432] LOG SocketEnginePolling: Got poll message: 0{"sid":"7RPKclRosgovPKY5AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.197839+0900 Tests[4397:171432] LOG SocketEngine: Got message: 0{"sid":"7RPKclRosgovPKY5AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.198569+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: ping wi Server: http://localhost:5000 2020-12-18 13:08:24.189113+0900 Tests[4397:171225] LOG SocketManager: Scheduling reconnect in 15.068159317825785s 2020-12-18 13:08:24.189439+0900 Tests[4397 :171429] LOG SocketEngine: 握手 2020-12-18 13:08:24.189732+0900 测试[4397:171429] LOG SocketEnginePolling: 进行轮询 GET http://localhost:5000/socket.io/?bport= -12-18 13:08:24.197564+0900 测试[4397:171432] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.197690+0900 测试[4397:171432] LOG SocketEnginePolling:得到轮询消息:0{ "sid":"7RPKclRosgovPKY5AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.197839+0900 测试[4397:171432] LOG SocketEngine :收到消息:0{"sid":"7RPKclRosgovPKY5AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.198569+0900 测试[ 4397:171225] LOG SocketIOClient{/}:处理事件:ping wi th data: [] 2020-12-18 13:08:24.198587+0900 Tests[4397:171432] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=7RPKclRosgovPKY5AAAB 2020-12-18 13:08:24.198671+0900 Tests[4397:171225] LOG SocketManager: Engine opened Connect 2020-12-18 13:08:24.198848+0900 Tests[4397:171225] LOG SocketIOClient{/}: Socket connected 2020-12-18 13:08:24.199022+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: statusChange with data: [connected, 3] 2020-12-18 13:08:24.199197+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: connect with data: ["/"] Connected 2020-12-18 13:08:24.199445+0900 Tests[4397:171432] LOG SocketEngine: Writing poll: has data: false 2020-12-18 13:08:24.199714+0900 Tests[4397:171432] LOG SocketEnginePolling: Sending poll: as type: 2 2020-12-18 13:08:24.199973+0900 Tests[4397:171432] LOG SocketEnginePolling: Created POST string: 1:2 2020-12-18 13:08:24.200257+0900 Tests[4397:1数据:[] 2020-12-18 13:08:24.198587+0900 测试[4397:171432] LOG SocketEnginePolling: Doing polling GET http://localhost:5000/socket.io/?transport=polling&b64=15AAASid=20RPRogov -12-18 13:08:24.198671+0900 测试[4397:171225] LOG SocketManager:引擎打开连接 2020-12-18 13:08:24.198848+0900 测试[4397:171225] LOG SocketIOClient{/}:套接字已连接 2020 -12-18 13:08:24.199022+0900 测试[4397:171225] LOG SocketIOClient{/}:处理事件:statusChange 与数据:[已连接,3] 2020-12-18 13:08:24.199197+0900 测试[4397 :171225] LOG SocketIOClient{/}:处理事件:使用数据连接:["/"] 已连接 2020-12-18 13:08:24.199445+0900 测试 [4397:171432] LOG SocketEngine:写入轮询:有数据:false 2020-12-18 13:08:24.199714+0900 测试[4397:171432] LOG SocketEnginePolling:发送轮询:作为类型:2 2020-12-18 13:08:24.199973+0900 测试[4397:171432] LOG SocketEnginePolling:已创建POST 字符串:1:2 2020-12-18 13:08:24.200257+0900 测试[4397:1 71432] LOG SocketEnginePolling: POSTing 2020-12-18 13:08:24.200524+0900 Tests[4397:171432] LOG SocketEnginePolling: Doing polling POST http://localhost:5000/socket.io/?transport=polling&b64=1&sid=7RPKclRosgovPKY5AAAB 2020-12-18 13:08:24.205180+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: websocketUpgrade with data: [["upgrade": "websocket", "connection": "Upgrade", "sec-websocket-accept": "e5m4DoLk6GlrzUzZSHtQ/n0gXl0="]] 2020-12-18 13:08:24.205309+0900 Tests[4397:171429] LOG SocketEngineWebSocket: Sending ws: probe as type: 2 2020-12-18 13:08:24.207171+0900 Tests[4397:171429] LOG SocketEngine: Got message: 3probe 2020-12-18 13:08:24.207420+0900 Tests[4397:171429] LOG SocketEngine: Received probe response, should upgrade to WebSockets 2020-12-18 13:08:24.207622+0900 Tests[4397:171429] LOG SocketEngine: Upgrading transport to WebSockets 2020-12-18 13:08:24.209704+0900 Tests[4397:171429] LOG SocketEnginePolling: Sending poll: as type: 6 2020 71432] log socketEnginePolling:发布2020-12-18 13:08:24.200524+0900测试[4397:171432] log socketEnginePolling:进行投票post z80791b3ae7002cb8888888c24688c246876d9faa&000:/cocket:/000:///socke:///socket =: 2020-12-18 13:08:24.205180+0900 测试[4397:171225] LOG SocketIOClient{/}:处理事件:websocketUpgrade with data: [["upgrade": "websocket", "connection": "Upgrade", " sec-websocket-accept": "e5m4DoLk6GlrzUzZSHtQ/n0gXl0="]] 2020-12-18 13:08:24.205309+0900 测试[4397:171429] LOG SocketEngineWebSocket: 发送 ws: 探测类型: 2 2020-12-18 13 :08:24.207171+0900 Tests[4397:171429] LOG SocketEngine: Got message: 3probe 2020-12-18 13:08:24.207420+0900 Tests[4397:171429] LOG SocketEngine: 收到探测响应,应该升级到 WebSockets 2020- 12-18 13:08:24.207622+0900 测试[4397:171429] LOG SocketEngine:将传输升级到 WebSocket 2020-12-18 13:08:24.209704+0900 测试[4397:171429] LOG SocketEnginePolling:发送轮询:作为类型: 6 2020 -12-18 13:08:24.210114+0900 Tests[4397:171225] LOG SocketIOClient{/}: Handling event: pong with data: [] 2020-12-18 13:08:24.210826+0900 Tests[4397:171431] LOG SocketEngine: Flushing probe wait 2020-12-18 13:08:24.211131+0900 Tests[4397:171431] LOG SocketEnginePolling: Got polling response 2020-12-18 13:08:24.211279+0900 Tests[4397:171431] LOG SocketEngine: Switching to WebSockets 2020-12-18 13:08:24.211500+0900 Tests[4397:171431] LOG SocketEngineWebSocket: Sending ws: as type: 5 2020-12-18 13:08:24.211974+0900 Tests[4397:171431] LOG SocketEngine: Flushing probe wait -12-18 13:08:24.210114+0900 Tests[4397:171225] LOG SocketIOClient{/}:处理事件:pong with data: [] 2020-12-18 13:08:24.210826+0900 Tests[4397:171431] LOG SocketEngine:Flushing probe wait 2020-12-18 13:08:24.211131+0900 Tests[4397:171431] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.211279+0900 Tests[4397:171431] LOG SocketEngine : 切换到 WebSockets 2020-12-18 13:08:24.211500+0900 测试[4397:171431] LOG SocketEngineWebSocket: 发送 ws: as type: 5 2020-12-18 13:08:24.211974+0900 测试[4397:171431] LOG SocketEngine:刷新探针等待

It could be related to security.这可能与安全有关。 Typically ios apps expect connections using https.通常 ios 应用程序期望使用 https 进行连接。 To allow http connections, in your info.plist add this (temporary security fix):要允许 http 连接,请在 info.plist 中添加以下内容(临时安全修复):

<key>NSAppTransportSecurity</key>
<dict>

 <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM