“从服务器收到未知错误......”在 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 教程 swift介绍

我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

在swift中导入swift链接的objc类

在 Swift 项目中使用 Objective C 类中的 Swift 类

在 Swift 项目中使用 Objective C 类中的 Swift 类