【问题标题】:Swift socket.io .emit() doesn't fireSwift socket.io .emit() 不会触发
【发布时间】:2018-12-19 19:59:53
【问题描述】:

我是套接字新手,遇到以下问题,我使用 this 库将我的应用程序连接到我的 nodejs 服务器。 我想知道为什么如果我以下列方式调用 socket.emit() 不起作用:

override func viewDidLoad() {
    var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)

    socket.emit("ping","some data");
    socket.connect();
}

滑动 socket.emit 和 socket.connect 函数都不起作用,但如果我通过单击按钮触发 socket.emit 函数,它就会起作用:

override func viewDidLoad() {
   var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)
   socket.connect();
}

@IBAction func sendMessage(sender: AnyObject) {
   socket.emit("ping","some data");
}

我想我在这里遗漏了一些东西,如果有人可以向我解释一下,那就太好了

【问题讨论】:

  • 对这个库或您的实现不太了解,但似乎要求套接字在其连接之前发出是行不通的,这就是为什么它在您的第二个示例中工作正常但在你的第一个。

标签: ios swift sockets


【解决方案1】:

在调用发出之前,套接字需要一个连接。您可能应该等到有连接后再发出。试试这个:

override func viewDidLoad() {
    let socket = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)
    socket.on("connect") { _, _ in
        print("socket connected")
        socket.emit("ping", "data")
    }
    socket.on("ping") { _, _ in
        print("ping received")
    }
    socket.connect()
}

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2017-03-19
    • 2023-04-09
    • 2017-03-30
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2017-07-08
    相关资源
    最近更新 更多