NSPOSIXErrorDomain Code=57 "套接字未连接"

问题描述

我正在使用 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()
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...