Ответ 1
После установки (это означает, что трехстороннее рукопожатие завершается), необработанное TCP-соединение использует нулевую пропускную способность, если:
- Вы отправляете или получаете данные
- TCP keepalives явно включены
Сервер или клиент могут включить TCP keepalives. Контрольный пакет - это пакет с нулевой длиной, отправленный с установленным флагом ACK
, и только 54 байта отправлены на проводе плюс еще 54 для ответа. По умолчанию TCP keepalives отправляются каждые два часа. Другими словами, совершенно пренебрежимо мало.
У WebSockets также есть свой собственный механизм keepalive (с прокси-серверами). Сервер или клиент может отправить кадр PING
, а другой конец ДОЛЖЕН ответить кадром PONG
. Хотя для отправки PING
s не существует JS API на стороне браузера, сервер node может отправить их, и совместимый браузер автоматически ответит. (QtWebSockets имеет API для отправки PING
s.) Это не происходит по умолчанию; вы должны сделать это вручную. Кадры WebSocket PING
и PONG
не менее 7 байтов и не более 131 байт каждый (плюс 54 байта служебных данных TCP/IP). Таким образом, один PING
/PONG
стоит от 122 до 370 байт.
ws не выполняет никаких keepalives автоматически, равно как и QtWebSockets. Поэтому, чтобы ответить на ваш вопрос, в конфигурации по умолчанию используется нулевая пропускная способность для поддержки TCP-соединения.
Однако...
Хранилища важны, потому что промежуточные устройства (например, маршрутизаторы NAT) будут отключать неактивные TCP-соединения. В зависимости от сетей между вашим сервером и вашими клиентами это означает, что если у вас нет каких-либо keepalives, ваши клиенты потеряют свои соединения (возможно, не зная об этом, что плохо), и вам придется повторно использовать сеанс WebSocket, Это, вероятно, будет намного более дорогостоящим с точки зрения пропускной способности, чем использование разумных keepalives.A PING
/PONG
каждые 5 минут стоит 1,5-4,4 кБ в час (на одного клиента).
Примечание: у socket.io есть свой собственный механизм keepalive (отдельно от WebSockets), который по умолчанию включен. Sio keepalive управляется библиотекой sio и происходит по каналу данных WebSocket (в отличие от WebSocket PING
/PONG
, которые являются управляющими кадрами). Сервер socket.io отправляет 8-байтное (+ служебное) сообщение keepalive каждые 30 секунд, что составляет около 15 кБ в час.