【问题标题】:socket.io official client connection issues?socket.io 官方客户端连接问题?
【发布时间】:2015-06-21 19:51:46
【问题描述】:

我正在使用 iOS 8 和 Swift。我想使用官方的 socket.io 客户端,但由于某种原因它没有尝试连接。我按照这里给出的例子:https://github.com/socketio/socket.io-client-swift

let socket = SocketIOClient(socketURL: "\(CurrentConfiguration.serverURL)") 

socket.reconnects = true
socket.reconnectWait = 10
socket.nsp = "/messagelist"

// Connect
socket.connect()

socket.onAny {println("got event: \($0.event) with items \($0.items)")} 
socket.on("connect") {data, ack in
    println("socket connected")
}

socket.on("error") {data in
    println("socket ERROR")
    println(data)
}

谁能证实这一点?这是版本问题还是可能与 Swift 1.2 有关?

在服务器端,我什至无法识别连接尝试。变量 serverURL 和我之前的一样,

【问题讨论】:

    标签: ios node.js ios8 websocket socket.io


    【解决方案1】:

    您应该使用 SocketIOClient 实例作为类属性。

    class aClass {
        let socket = SocketIOClient(socketURL: url)
    
        func someFunction() {
            socket.on("connect") {data, ack in
                println("socket connected")
            }
        }
    }
    

    我认为这是因为其中使用了很多闭包。

    【讨论】:

    • 好吧,我可以创建一个新类并将所有内容都设为类方法,但是我如何在 VC 中连接呢?我尝试了您的解决方案,但它仍然不会尝试连接
    【解决方案2】:

    确保在调用处理程序后调用socket.connect()。一个好的做法是使用所有必需的处理程序创建一个函数,并在 viewDidLoad 方法中调用它。之后,您将调用 connect 方法。

    例子:

    let socket = SocketIOClient(socketURL: "URL") 
    
    override func viewDidLoad() {
       super.viewDidLoad()
    
       // socket.io
       addHandlers()
       socket.connect()
    }
    
    func addHandlers() {
    
       self.socket.onAny {println("Got event: \($0.event), with items: \($0.items)")}
    
       self.socket.on("processReq") {[weak self] data, ack in
       // handler code here
       }
    
    }
    

    【讨论】:

    • 感谢@rambossa 在添加处理程序后调用 connect 的提示节省了我的时间:)
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多