问题描述
我正在使用 websocket 创建一个聊天应用程序。
我使用 URLSessionWebSocketTask
连接到服务器。
url = ws://"appname".herokuapp.com/chats/listen/
func connect(url: String) {
self.socket = session.webSocketTask(with: URL(string: url)!)
self.listen()
self.socket.resume()
}
func listen() {
self.socket.receive { [weak self] (result) in
guard let self = self else { return }
switch result {
case .failure(let error):
print(error)
return
case .success(let message):
switch message {
case .data(let data):
self.handle(data)
case .string(let str):
guard let data = str.data(using: .utf8) else { return }
self.handle(data)
@unkNown default:
break
}
}
self.listen()
}
}
它在本地主机上运行正常,但在我将服务器部署到 heroku 后,我收到了这条消息:
NSPOSIXErrorDomain Code=57 "套接字未连接
解决方法
我来宾,它在超时后自动断开连接。
所以,我每 10 秒添加一次 ping 功能。然后,它起作用了:
func sendPing() {
self.socket.sendPing { (error) in
if let error = error {
print("Sending PING failed: \(error)")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
self.sendPing()
}
}
}