@dev123

Почему обрывается соединение по websocket через 100 секунд?

Добрый день.
Имеется сайт с веб-сервером nginx. Также поднят вебсокет сервер. Nginx выступает в качестве прокси для сервера вебсокетов. В браузере устанавливается соединение по вебсокету. Проблема в том, что если по вебсокету не передаются данные на протяжении 100 секунд, то соединение обрывается.

Нагуглил что в конфиге nginx на это может влиять параметр proxy_read_timeout. Выставил 950 секунд и всё-равно по истечении 100 секунд соединение обрывается. Эксперимента ради параметр proxy_read_timeout выставил в 60 - произошел обрыв через эти 60 секунд, а вот при 950 секундах обрывает через 100 секунд.

Может не в настройке nginx дело, а в настройках самого вебсокета?

Также сайт подключен к Cloudeflare, но гугл говорит что Cloudeflare нормально работает с вебсокетами и не рубит соединение.

Конфиг nginx для вебсокет сервера:
upstream binaryt {
       server 127.0.0.1:9009;
}


location:
location /binaryt {
        proxy_pass http://binaryt;
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_read_timeout 950s;
        proxy_send_timeout 950s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
}


Подключаюсь с помощью библиотеки binary js:
const Websocket = function () {
    this.client = new BinaryClient('wss://mydomain.com/binaryt');
}


PS. Добавлю что после обрыва в обработчике close на сервере возвращается code = 1000, а на клиенте code = 1006
  • Вопрос задан
  • 945 просмотров
Решения вопроса 1
@dev123 Автор вопроса
В общем для решения проблемы надо слать ping-pong каждые 30 секунд для поддержания соединения
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы