go - 尝试恢复 Websocket 连接

标签 go websocket

我正在使用 this library .几个小时或一天后,websocket.JSON.Recieve 将出错并获得 EOF。我再次连接到 Web 套接字,没有问题,但我一直收到 EOF,直到我重新启动我的应用程序。

func getMessage(ws *websocket.Conn) (m Message, err error) {
    err = websocket.JSON.Receive(ws, &m)
    if err != nil {
        log.Printf("Get Message - %s - Reconnecting...", err)
        ws, _ = connect(token) // This just does a dial
        err = websocket.JSON.Receive(ws, &m)
    }
    return
}

最佳答案

我最好的猜测是它与“最大打开文件数”有某种关系。这是一个远景,但试一试。

您的服务器/库没有正确关闭/释放结束/失效的连接。

它特定于操作系统,但我猜您使用的是 Linux。 所以下次你出现问题时(在你重新启动你的应用程序之前)你能运行

# lsof -p PID | wc -l
# lsof -a -p PID | wc -l

# cd /proc/PID/fd; ls -l | wc -l

服务器控制台上的服务器应用程序 PID 的 PID 在哪里?并将它与 lsof -a -p PID 一起发布到此处,通过指向 gist 或其他内容的链接(因为我期待长列表)。

使用# ps aux | 查找PID grep APPNAME# pidof APPNAME

您可以检查服务器范围内的“最大打开文件数”

sysctl fs.file-max

如果是这种情况,您可以使用 sysctl -w fs.file-max= 100000 增加最大打开文件数,但这只会延迟不可避免的事情,或者深入研究代码并处理这些未终止的连接.

有用的链接 list open files , max open files或自己谷歌。

关于go - 尝试恢复 Websocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663016/

相关文章:

amazon-web-services - AWS EC2 实例 WebSocket 连接失败的问题:连接建立错误:net::ERR_CONNECTION_TIMED_OUT

go - 连接超时访问外部IP google compute engine

Golang 模板不会加载

http - 戈兰 http.Get()

tomcat - WebSocket : java. nio.channels.ClosedChannelException &

java - 如何在 Jetty 9 中访问实例化的 WebSockets?

javascript - ArrayBufferView 未捕获错误 : INDEX_SIZE_ERR: DOM Exception 1

Golang 中的 Shell 扩展(命令替换)

go - 如何在接口(interface)上调用 len()?

javascript - 在没有公共(public) API 的情况下连接到网站 webosocket