我一直试图连接到本地服务器但没有成功。我的代码如下 -
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!")
}
}
日志中存在“正在尝试连接”和“完成尝试”的打印语句,但似乎没有调用任何委托方法。
我不确定这里有什么不妥。
感谢任何帮助。
答案 0 :(得分:0)
问题在于,我在AppDelegate中创建了类SocketManager
的实例,并且该变量超出了范围。
为了解决这个问题,我在AppDelegate
中创建了一个实例变量,之后按照预期调用了委托方法。
这是我在Github回购中发布的问题的链接。
https://github.com/daltoniam/Starscream/issues/203
希望它有所帮助。
答案 1 :(得分:0)
对于仍然感到困惑的任何人,问题(对我而言)是我正在初始化并调用viewDidLoad
中的所有内容:
let client = WsClient(echoURL: "ws://localhost:8000/")
client.connect()
client.socket.write(string: "Hi Server!")
要解决此问题,我仅将client
定义移为ViewController
的属性,同时将connect
和write
保留在viewDidLoad
中。这行得通!
现在我有
class ViewController: UIViewController {
let client = WsClient(echoURL: "ws://localhost:8000/")
(...)
override func viewDidLoad() {
client.connect()
client.socket.write(string: "Hi Server!")
}
}