【发布时间】:2017-10-27 19:18:39
【问题描述】:
我正在开发应用程序的聊天功能,因此我在 iOS 应用程序的客户端使用 Socket.io 和 node 和 swift。
我在应用程序的某些部分有这样的课程:
class SocketIOManager: NSObject {
// Socket manager instantiation
static let sharedInstance = SocketIOManager()
static let urls = EndpointsURLs()
var socket = SocketIOClient(socketURL: URL(string: urls.urlSocket)!, config: [.log(false), .forcePolling(true), .doubleEncodeUTF8(true)])
override init() {
super.init()
}
func establishConnection() {
socket.connect()
}
func closeConnection() {
socket.disconnect()
}
// Emit events:
func emitExample(argument: String){
// Custom emit event
let data: NSDictionary = ["argument": argument]
socket.emit("local join", data)
}
...
}
我在 AppDelegate.swift 中使用 establishConnection() 方法。
在 viewController 我有一个类似的方法:
func listenEvents(){
SocketIOManager.sharedInstance.socket.off("message")
SocketIOManager.sharedInstance.socket.on("message") { (data, ack) in
// Do some actions
}
....
SocketIOManager.sharedInstance.socket.off("otherEvent")
SocketIOManager.sharedInstance.socket.on("otherEvent") { (data, ack) in
// Do some actions
}}
此代码运行良好,但只能运行几分钟。然后,对话中的一个或两个参与者不会收到任何新消息。换句话说,swift中的套接字客户端代码在一定时间后不再监听。 我注意到,当我断开互联网并重新连接时,总是会发生此错误。
我曾尝试重新连接套接字,每次运行“on 方法”或在聊天期间发生事件(例如 Internet 连接丢失),但没有任何结果。
为什么套接字在一些消息后停止监听事件?
【问题讨论】: