我正在使用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 回答
我最好的猜测是它与“最大打开文件”有某种关联 . 这是一个很长的镜头,但尝试一下 .
您的服务器/ lib未正确关闭/释放已结束/已结束的连接 .
它的操作系统特定,但我猜你使用的是Linux . 因此,下次问题发生时(重新启动应用程序之前),您可以运行
要么
哪个PID是服务器控制台上的服务器应用程序PID?并将其与
lsof -a -p PID
一起发布,通过链接到gist或其他东西(因为我期待很长的名单) .使用
# ps aux | grep APPNAME
或# pidof APPNAME
查找PID .您可以使用检查服务器范围的“最大打开文件”
如果是这种情况,您可以使用
sysctl -w fs.file-max= 100000
增加最大打开文件,但它只会延迟不可避免的,或者深入研究代码并处理这些未终止的连接 .有用链接list open files,max open files或谷歌自己 .