gpt4 book ai didi

ios - Socket.io监听方法在一段时间或失去Internet连接后不监听

转载 作者:行者123 更新时间:2023-12-01 16:23:42 24 4
gpt4 key购买 nike

我正在使用应用程序的聊天功能,因此我在iOS应用程序中使用了带有node和swift的Socket.io

我在应用程序的某些部分有这样的 class :

   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中使用方法 EstablishmentConnection()

在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

}}

这段代码很好用,但只持续了几分钟。然后,一个或两个 session 参与者都不会收到任何新消息。换句话说,在一定时间后,swift中的socket-client代码不再侦听。
我注意到,当我断开与互联网的连接并重新连接时,总是会发生此错误。

我尝试重新连接套接字,每次都运行“on方法”,或者在聊天过程中发生事件(例如互联网连接丢失),但没有结果。

为什么套接字在某些消息后停止监听事件?

最佳答案

以下是处理套接字连接丢失的示例,对我来说效果很好
也许这可以帮助

func getChatMessage(_ UserLoginDetails: [AnyHashable : Any]?, withCompletion completionHandler: @escaping (_ Server_Response: [AnyHashable]?) -> Void) {
var UserLoginDetails = UserLoginDetails
if let UserLoginDetails = UserLoginDetails {
print("\(UserLoginDetails)")
}

var userdata = UserLoginDetails
let roomid = userdata?["roomId"] as? String
UserLoginDetails = nil

if socket.status() != SocketIOStatusConnected {
socket.on("connect", callback: { data, ack in
if userdata != nil {
self.socket.emit("getMessages", with: [userdata])
self.socket.off(roomid)
self.socket.on(roomid, callback: { data, ack in

completionHandler(data)
})
userdata = nil
}
})
} else {
if userdata != nil {
socket.emit("getMessages", with: [userdata])
socket.off(roomid)
socket.on(roomid, callback: { data, ack in
completionHandler(data)
})
userdata = nil
}}socket.connect()

关于ios - Socket.io监听方法在一段时间或失去Internet连接后不监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com