Почему соединение EventSource закрывается каждые 30-60 секунд, когда данные не передаются, а соединение WebSocket остается открытым? - PullRequest
7 голосов
/ 06 января 2012

Я хотел бы передавать данные пользователям каждые 2 минуты. Использование EventSource требует дополнительного проталкивания нулевого байта каждые 29 секунд, чтобы сохранить соединение открытым. WebSocket не требует такого пинга. Почему соединение EventSource регулярно закрывается и вновь открывается? Это потому, что в HTTP нет хорошего встроенного способа проверить, открыто ли соединение, или по другой причине?

Ответы [ 2 ]

7 голосов
/ 28 апреля 2012

это может зависеть от вашего серверного программного обеспечения

В файле node.js задано время ожидания по умолчанию 2 минуты

вот статья об этом - http://contourline.wordpress.com/2011/03/30/preventing-server-timeout-in-node-js/

решение:

res.connection.setTimeout(0); // this could take a while

7 голосов
/ 06 января 2012

API-интерфейс событий, отправляемых сервером (Eventsource), основан на HTTP.WebSocket многоуровневый по TCP (но имеет HTTP-совместимое рукопожатие).Как HTTP, так и TCP часто имеют время ожидания простоя, однако время ожидания TCP, как правило, намного больше (например, 2 часа, а не 2 минуты).Таким образом, вам все еще могут понадобиться сообщения поддержки активности в WebSockets, но они могут быть гораздо реже.Кроме того, стандарт WebSocket определяет кадры для пинг-понга, которые браузер / сервер может реализовать для вас.

...