【问题标题】:How to emit an event in Socket.io Swift4如何在 Socket.io Swift4 中发出事件
【发布时间】:2018-03-27 10:05:34
【问题描述】:

我正在尝试在用户加入聊天室时发出事件。所以我有 2 节课:

  • SocketIOManager
  • 视图控制器

SocketIOManager代码:

import SocketIO

class SocketIOManager: NSObject {

    static let manager = SocketManager(socketURL: URL(string: "https://myurl.com:443")!, config: [.log(true), .compress])
    static let socket = manager.defaultSocket

    class func connectSocket(){
        self.manager.config = SocketIOClientConfiguration(
            arrayLiteral: .connectParams(["token": myToken), .secure(true)
        )
        socket.connect()
    }

    class func connectToChatRoom(chat: String, user: String){
        let jsonDic = ["chat": chat,
                       "user": user]

        print("CHEKING SOCKET CONNECTION 1-ST TIME - \(socket.status)") // This gives me - connecting

        socket.emit("join", jsonData)

        print("CHEKING SOCKET CONNECTION 2-ND TIME - \(socket.status)") // This gives me - connecting
    }

    class func isSocketConnected() -> Bool{
        if socket.status == .connected {
            return true
        }
        return false
    }
}

在我的 ViewController 中我会这样做 - 首先我连接套接字。然后我尝试发射。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        SocketIOManager.connectSocket()
        SocketIOManager.connectToChatRoom(chat: chatID, user: myID)

        print("\(SocketIOManager.isSocketConnected())")  //This gives me "false"
    }
}

毕竟我在来自 Socket.IO 的日志中收到错误:尝试在未连接时发出连接

CHEKING SOCKET CONNECTION 1-ST TIME - connecting
2018-03-27 12:26:04.895072+0300 MyApp[3760:1940922] LOG SocketIOClient{/}: Handling event: error with data: ["Tried emitting join when not connected"]
CHEKING SOCKET CONNECTION 2-ND TIME - connecting
false

我做的发射对吗?如何使用 Socket.IO 执行发射?

【问题讨论】:

  • 在调用发射之前,套接字需要一个连接。您可能应该等到有连接后再发出。不确定这是否可以帮助您,但您可以参考此链接以进一步移动stackoverflow.com/questions/36460280/…
  • 是的,有帮助。

标签: ios swift socket.io


【解决方案1】:

在调用发出之前,套接字需要一个连接。为此,Socket.IO 有一个监听器 socket.on(“connect”)。因此,在我们获得连接状态后,我们可以发出。

socket.on("connect") { _, _ in
        print("socket connected")
        socket.emit("your_event", jsonObject)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 2023-04-08
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2021-12-31
    • 2019-10-30
    • 2014-08-28
    相关资源
    最近更新 更多