【发布时间】:2020-12-18 04:13:07
【问题描述】:
我正在尝试将 iOS 应用程序与 Node.js WebSocket 服务器集成。 我将 SwiftUI 用于 iOS,将 socket.io 用于服务器和客户端。
但是当我尝试将 iOS 应用程序与服务器连接时, 好像连接不上服务器。
我通过将 React 应用程序连接到 Node.js 服务器来测试服务器是否正在运行 并且连接在浏览器上运行良好。
我检查了 swift 日志,它似乎试图与服务器握手,但是, 它开始长轮询,所以我猜握手过程有一些问题。
如果有新连接,我会在控制台将“新连接”作为字符串记录在 Node.js 服务器中,并且它适用于 React 但不适用于 Swift。
但我没有尝试任何先进的东西,所以我无法找出问题所在。
有人可以帮帮我吗?
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!")
}
}
这是我从 SocketIO-client-swift 得到的日志
2020-12-18 13:08:24.033132+0900 测试[4397:171225] 日志 SocketIOClient{/}:为事件添加处理程序:connect 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 测试[4397:171225] LOG SocketIOClient{/}:加入 命名空间 / 2020-12-18 13:08:24.033930+0900 测试[4397:171225] LOG SocketManager:在引擎未打开时尝试连接套接字。 连接 2020-12-18 13:08:24.034033+0900 测试[4397:171225] LOG SocketManager:添加引擎 2020-12-18 13:08:24.035507+0900 测试 [4397:171427] LOG SocketEngine:启动引擎。服务器: http://localhost:5000 2020-12-18 13:08:24.035608+0900 测试[4397:171427] LOG SocketEngine:握手 2020-12-18 13:08:24.038113+0900 测试[4397:171427] LOG SocketEnginePolling: Doing 轮询 GET http://localhost:5000/socket.io/?transport=polling&b64=1 2020-12-18 13:08:24.125554+0900 测试[4397:171431] [] nw_protocol_get_quic_image_block_invoke dlopen libquic 失败 2020-12-18 13:08:24.166652+0900 测试[4397:171427] 日志 SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.166801+0900 测试[4397:171427] LOG SocketEnginePolling: Got 投票消息: 0{"sid":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.168076+0900 测试[4397:171427] LOG SocketEngine: 收到消息: 0{"sid":"97Fb8N3Ub5ZuRlfHAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 2020-12-18 13:08:24.171813+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:ping 数据:[] 2020-12-18 13:08:24.171845+0900 测试[4397:171427] LOG SocketEnginePolling: Doing 轮询 GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-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 with data: [connected, 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:写入 民意调查:有数据:假 2020-12-18 13:08:24.174260+0900 测试 [4397:171427] LOG SocketEnginePolling:发送轮询:作为类型:2 2020-12-18 13:08:24.174607+0900 测试[4397:171427] 日志 SocketEnginePolling:创建的 POST 字符串:1:2 2020-12-18 13:08:24.175188+0900 测试[4397:171427] LOG SocketEnginePolling: 发布 2020-12-18 13:08:24.175708+0900 测试[4397:171427] 日志 SocketEnginePolling:进行轮询 POST http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.181566+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:带有数据的 websocketUpgrade: [[“升级”:“websocket”,“连接”:“升级”, “sec-websocket-accept”:“DK4ZA/luKjOL11P+2vm4APQNE5I="]] 2020-12-18 13:08:24.181780+0900 测试[4397:171429] LOG SocketEngineWebSocket: 发送 ws: probe as type: 2 2020-12-18 13:08:24.183557+0900 测试[4397:171431] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.183723+0900 测试[4397:171431] 日志 SocketEnginePolling:做轮询 GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=97Fb8N3Ub5ZuRlfHAAAA 2020-12-18 13:08:24.184529+0900 测试[4397:171427] LOG SocketEngine: 冲洗探针等待 2020-12-18 13:08:24.186620+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] LOG SocketEngine:引擎正在关闭。 2020-12-18 13:08:24.187029+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:数据错误:[“错误”] 2020-12-18 13:08:24.187306+0900 测试[4397:171428] 日志 SocketEnginePolling:创建的 POST 字符串:1:1 2020-12-18 13:08:24.187548+0900 测试[4397:171428] LOG SocketEnginePolling: Doing 投票 POST http://localhost:5000/socket.io/?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 测试[4397:171225] LOG SocketIOClient{/}:处理事件:statusChange 和数据: [连接,2] 2020-12-18 13:08:24.188558+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:重新连接数据:[“错误”] 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.189043+0900 测试[4397:171429] 日志 SocketEngine:启动引擎。服务器:http://localhost:5000 2020-12-18 13:08:24.189113+0900 测试[4397:171225] LOG SocketManager: 计划在 15.068159317825785s 2020-12-18 中重新连接 13:08:24.189439+0900 测试[4397:171429] LOG SocketEngine:握手 2020-12-18 13:08:24.189732+0900 测试[4397:171429] 日志 SocketEnginePolling:做轮询 GET http://localhost:5000/socket.io/?transport=polling&b64=1 2020-12-18 13:08:24.197564+0900 测试[4397:171432] LOG SocketEnginePolling: Got 投票响应 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] 日志 SocketIOClient{/}:处理事件:ping 数据:[] 2020-12-18 13:08:24.198587+0900 测试[4397:171432] LOG SocketEnginePolling: Doing 轮询 GET http://localhost:5000/socket.io/?transport=polling&b64=1&sid=7RPKclRosgovPKY5AAAB 2020-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 with data: [connected, 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:写入 民意调查:有数据:假 2020-12-18 13:08:24.199714+0900 测试 [4397:171432] LOG SocketEnginePolling:发送轮询:作为类型:2 2020-12-18 13:08:24.199973+0900 测试[4397:171432] 日志 SocketEnginePolling:创建的 POST 字符串:1:2 2020-12-18 13:08:24.200257+0900 测试[4397:171432] LOG SocketEnginePolling: 发布 2020-12-18 13:08:24.200524+0900 测试[4397:171432] 日志 SocketEnginePolling:进行轮询 POST http://localhost:5000/socket.io/?transport=polling&b64=1&sid=7RPKclRosgovPKY5AAAB 2020-12-18 13:08:24.205180+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:带有数据的 websocketUpgrade: [[“升级”:“websocket”,“连接”:“升级”, “sec-websocket-accept”:“e5m4DoLk6GlrzUzZSHtQ/n0gXl0="]] 2020-12-18 13:08:24.205309+0900 测试[4397:171429] LOG SocketEngineWebSocket: 发送 ws: probe as type: 2 2020-12-18 13:08:24.207171+0900 测试[4397:171429] LOG SocketEngine:收到消息:3probe 2020-12-18 13:08:24.207420+0900 测试[4397:171429] LOG SocketEngine:已接收 探测响应,应该升级到 WebSockets 2020-12-18 13:08:24.207622+0900 测试[4397:171429] LOG SocketEngine:升级 传输到 WebSockets 2020-12-18 13:08:24.209704+0900 测试 [4397:171429] LOG SocketEnginePolling:发送轮询:作为类型:6 2020-12-18 13:08:24.210114+0900 测试[4397:171225] 日志 SocketIOClient{/}:处理事件:pong with data: [] 2020-12-18 13:08:24.210826+0900 测试[4397:171431] LOG SocketEngine: Flushing 探测等待 2020-12-18 13:08:24.211131+0900 测试[4397:171431] LOG SocketEnginePolling:得到轮询响应 2020-12-18 13:08:24.211279+0900 测试[4397:171431] LOG SocketEngine:切换到 WebSockets 2020-12-18 13:08:24.211500+0900 测试[4397:171431] 日志 SocketEngineWebSocket: 发送 ws: as type: 5 2020-12-18 13:08:24.211974+0900 测试[4397:171431] LOG SocketEngine: Flushing 探测等待
【问题讨论】:
标签: node.js swift websocket swiftui socket.io-1.0