Swift 红蜘蛛 websocket pod 未连接到本地服务器且未调用委托方法

Swift Starscream websocket pod not Connecting to local server and no delegate methods called

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

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" 都出现在日志中,但是 none 的委托方法似乎被调用了。

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

感谢任何帮助。

问题是,我在 AppDelegate 中创建了 class SocketManager 的实例,但该变量超出了范围。

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

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

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

希望对您有所帮助。

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

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

为了解决这个问题,我只是将 client 定义移动为 ViewController 的 属性,同时将 connectwrite 保留在 viewDidLoad。这有效!

所以现在我有

class ViewController: UIViewController {
    let client = WsClient(echoURL: "ws://localhost:8000/")
    (...)
    override func viewDidLoad() {
        client.connect()
        client.socket.write(string: "Hi Server!")
    }
}