2016-06-06 2 views
0

Я использую this library. После нескольких часов или дня websocket.JSON.Recieve будет ошибкой и получит EOF. Я снова подключаюсь к веб-сокету и никаких проблем, но потом я просто продолжаю получать EOF, пока не перезапущу приложение.Попытка восстановить соединение с Websocket

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 
} 
+0

> websocket.JSON.Recieve будет ошибка. | и какая ошибка? – Darigaaz

+0

@Darigaaz ошибка просто говорит «EOF». Я видел других людей, использующих эту библиотеку, и никто не пытается ее восстановить, я видел, как люди полностью закрывают свое приложение, когда они получают какую-либо ошибку, или некоторые, которые специально закрывают приложение на «EOF». – wakinov

ответ

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 или еще что (так как я ожидаю длинный список).

Найти PID с # ps aux | grep APPNAME или # pidof APPNAME.

Вы можете проверить сервер широкие «макс открытые файлы» с

sysctl fs.file-max 

Если это так, вы можете увеличить максимальные открытые файлы с sysctl -w fs.file-max= 100000, но это будет только оттянуть неизбежное, или копаться в коде и обрабатывать эти неразрешенные соединения.

Полезные ссылки list open files, max open files или Google самостоятельно.

Смежные вопросы