“从服务器收到未知错误......”在 Swift 上使用 Socket.io
Posted
技术标签:
【中文标题】“从服务器收到未知错误......”在 Swift 上使用 Socket.io【英文标题】:"Got unknown error from server ..." using Socket.io on Swift 【发布时间】:2016-11-18 19:20:14 【问题描述】:我正在尝试连接到我的 Xcode 服务器的内部 socket.io。我使用这个初始化客户端:
self.socket = SocketIOClient(socketURL: NSURL(string: "https://37.203.216.82")!, options: [.Path("/xcode/internal/socket.io"), .Log(true), .Reconnects(true), .ForceNew(true), .SessionDelegate(self), .SelfSigned(true)])
但是当我使用self.socket.connect()
时,我得到了这样的回复:
2016-07-15 16:13:49.179 MyApp[84260:1941316] LOG SocketIOClient: Adding handler for event: connect
2016-07-15 16:13:49.180 MyApp[84260:1941316] LOG SocketIOClient: Adding handler for event: integrationStatus
2016-07-15 16:13:49.180 MyApp[84260:1941316] LOG SocketIOClient: Adding handler for event: advisoryIntegrationStatus
2016-07-15 16:13:49.180 MyApp[84260:1941316] LOG SocketIOClient: Adding engine
2016-07-15 16:13:49.181 MyApp[84260:1941316] LOG SocketEngine: Starting engine. Server: https://37.203.216.82
2016-07-15 16:13:49.181 MyApp[84260:1941316] LOG SocketEngine: Handshaking
2016-07-15 16:13:49.182 MyApp[84260:1941792] LOG SocketEnginePolling: Doing polling request
2016-07-15 16:13:49.317 MyApp[84260:1941792] LOG SocketEnginePolling: Got polling response
2016-07-15 16:13:49.322 MyApp[84260:1941786] LOG SocketEngine: Got message: Welcome to socket.io.
2016-07-15 16:13:49.324 MyApp[84260:1941786] ERROR SocketIOClient: Got unknown error from server Welcome to socket.io.
2016-07-15 16:13:49.326 MyApp[84260:1941786] LOG SocketIOClient: Handling event: error with data: (
"Got unknown error from server Welcome to socket.io."
)
我尝试将路径更改为socket.io.js
文件或xcode/internal/socket.io/1/
,但都给出了相同的响应,而是将Welcome to socket.io
替换为那里的文件内容。
【问题讨论】:
你有解决办法吗? 前几分钟仍然可以正常工作。没有图书馆更新。突然停止工作。 【参考方案1】:Socket.IO-Client-Swift (16.0.1):版本,需加:.forceWebsockets(true)
。
例子:
let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.compress, .forceWebsockets(true)])
let socket = manager.defaultSocket
https://github.com/socketio/socket.io-swift-fiddle/blob/main/Sources/Fiddle/main.swift
【讨论】:
当我将 Socket.IO-Client-Swift 更新到 (16.0.1) 时,我反复得到套接字连接状态,因此不得不恢复到 pod 'Socket.IO-Client-Swift', '~ > 15.2.0' 我仍然遇到这个问题,所以我不得不添加 .forceWebsockets(true)。现在它工作得很好。谢谢@ForrestWang【参考方案2】:检查服务器端和客户端的socket.io版本,两者不匹配可能导致此错误
【讨论】:
【参考方案3】:我已将 swift 客户端框架更新到最新的16.0.1
版本。但是发生了这个错误。还有一个未解决的问题:https://github.com/socketio/socket.io-client-swift/issues/1355
我已通过恢复到旧的稳定版本来解决此问题:
pod 'Socket.IO-Client-Swift', '~> 15.2.0'
【讨论】:
【参考方案4】:尝试将ws
作为协议,如下所示:
... NSURL(string: "ws://37.203.216.82") ...
【讨论】:
以上是关于“从服务器收到未知错误......”在 Swift 上使用 Socket.io的主要内容,如果未能解决你的问题,请参考以下文章
swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。
我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?