1

我一直在尝试连接到本地服务器但没有成功。我的代码如下 -

class SocketManager: NSObject, WebSocketDelegate {
    var socket: WebSocket!

    override init() {
        super.init()

        self.socket = WebSocket(url: NSURL(string: "ws://localhost:9292/")!)
        self.socket.delegate = self
        print("TRYING TO CONNECT")
        self.socket.connect()
        print("DONE TRYING")
    }

    func websocketDidConnect(ws: WebSocket) {
        print("websocket is connected")
    }

    func websocketDidDisconnect(ws: WebSocket, error: NSError?) {
         print("websocket is disconnected: \(error?.localizedDescription)")
    }

    func websocketDidReceiveMessage(ws: WebSocket, text: String) {
        print("Received text: \(text)")
    }

    func websocketDidReceiveData(ws: WebSocket, data: NSData) {
         print("Received data: \(data.length)")
    }

    func websocketDidReceivePong(socket: WebSocket) {
        print("Got pong!")
    }
}

打印语句“TRYING TO CONNECT”和“DONE TRYING”都出现在日志中,但似乎没有调用任何委托方法。

我不确定这里可能有什么问题。

任何帮助表示赞赏。

4

2 回答 2

1

对于仍然感到困惑的任何人,问题(对我来说)是我正在初始化并调用所有内容viewDidLoad

let client = WsClient(echoURL: "ws://localhost:8000/")
client.connect()
client.socket.write(string: "Hi Server!")

为了解决这个问题,我只是将client定义移动为 , 的属性ViewController,同时将connect和保留writeviewDidLoad. 这行得通!

所以现在我有

class ViewController: UIViewController {
    let client = WsClient(echoURL: "ws://localhost:8000/")
    (...)
    override func viewDidLoad() {
        client.connect()
        client.socket.write(string: "Hi Server!")
    }
}
于 2019-07-08T15:13:05.203 回答
1

问题是,我SocketManager在 AppDelegate 中创建了一个类的实例,并且该变量超出了范围。

为了解决这个问题,我在 中创建了一个实例变量AppDelegate,之后按预期调用了委托方法。

这是我在他们的 Github 存储库上发布的问题的链接。

https://github.com/daltoniam/Starscream/issues/203

希望能帮助到你。

于 2016-08-08T06:35:43.173 回答