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
的 属性,同时将 connect
和 write
保留在 viewDidLoad
。这有效!
所以现在我有
class ViewController: UIViewController {
let client = WsClient(echoURL: "ws://localhost:8000/")
(...)
override func viewDidLoad() {
client.connect()
client.socket.write(string: "Hi Server!")
}
}
我一直在尝试连接到本地服务器,但没有成功。我的代码如下-
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
的 属性,同时将 connect
和 write
保留在 viewDidLoad
。这有效!
所以现在我有
class ViewController: UIViewController {
let client = WsClient(echoURL: "ws://localhost:8000/")
(...)
override func viewDidLoad() {
client.connect()
client.socket.write(string: "Hi Server!")
}
}