首页 文章

试图恢复Websocket连接

提问于
浏览
0

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

1 回答

  • 1

    我最好的猜测是它与“最大打开文件”有某种关联 . 这是一个很长的镜头,但尝试一下 .

    您的服务器/ lib未正确关闭/释放已结束/已结束的连接 .

    它的操作系统特定,但我猜你使用的是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 | grep APPNAME# pidof APPNAME 查找PID .

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

    sysctl fs.file-max
    

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

    有用链接list open filesmax open files或谷歌自己 .

相关问题