Socket.io swift客户端自动多次重新连接

Posted

技术标签:

【中文标题】Socket.io swift客户端自动多次重新连接【英文标题】:Socket.io swift client getting reconnected multiple time automatically 【发布时间】:2019-11-20 10:53:35 【问题描述】:

我正在为我的应用程序使用 Socket.IO-Client-Swift', '~> 13.1.0'。我已成功将我的应用程序与 Socket 服务器连接,但问题是,它被多次重新连接。结果,也许我无法向服务器发送任何内容。谁能帮我这个?

这是我的代码:

类 SocketIOManager: NSObject

var locationReceiverDelegate: LocationReceiverDelegate?
static let shared = SocketIOManager()
let manager = SocketManager(socketURL: URL(string: "server-url")!, config: [.log(true), .connectParams(["token" : "token-string"])])

var socket : SocketIOClient!


override init() 
    super.init()

    socket = manager.defaultSocket
    self.connectSocket() 


func connectSocket() 

    socket.on(clientEvent: .connect) data, ack in
        print("socket connected")
    

    self.socket.on("connected")  ( dataArray, ack)  in
        print("dataArray",dataArray)
    

    self.socket.on("error")  (data, ack) in
        print("error-->", data)
    

    self.socket.on("location::share.error")  (data, ack) in
        print("location::share.error-->", data)
    


    self.socket.on("location::receive")  (data, ack) in

        print("location::receive-->", data[0])

    



func establishConnection() 
    print("in connect socket")
    socket.connect()


func disconnectSocket() 
    socket.disconnect()
    print("in disconnect socket")


func updateCurrentLocation(myLocation: CLLocation) 

    print(myLocation.coordinate.latitude)
    print(myLocation.coordinate.longitude)
    print(myLocation.course)


    let data : Dictionary<String,Any> = [
        "latitude": myLocation.coordinate.latitude,
        "longitude": myLocation.coordinate.latitude,
        "angle": myLocation.course
    ]
    let jsonData = try! JSONSerialization.data(withJSONObject: data)
    print(jsonData)
    let jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)

    print((String(describing: jsonString!)))
    socket.emit("location::share", "\(String(describing: jsonString!))")


【问题讨论】:

请显示使用SocketIOManager的代码 【参考方案1】:
socket.emit(Your_Key, with: [Your_Data])

也许这就是您的服务器查找数据的方式! (发出您的数据数组)。在发送数据之前检查您的套接字状态。

【讨论】:

【参考方案2】:

在调用 on 事件之前,您是否尝试过使用 socket.off('event')?

【讨论】:

以上是关于Socket.io swift客户端自动多次重新连接的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)

Socket.IO-Client-Swift 未连接到 nodejs socket.io 服务器

Socket.io - nodejs 服务器端。重新连接后传输关闭

Socket.IO与服务器多次连接

socket.io javascript客户端在重新启动服务器后无法重新连接

“从服务器收到未知错误......”在 Swift 上使用 Socket.io