⚠️ Maintenance. Notice: the site is currently in maintenance mode, so the amount of available material is temporarily limited.

Frequently asked questions

Short answers to the questions readers send most. For the long versions, follow the links into the tutorials.

What's the difference between ws:// and wss://?

wss:// is WebSocket over TLS — the same relationship as https to http. Always use wss:// in production: browsers block ws:// from secure pages, and unencrypted frames are readable by anything on the path.

Is there a maximum message size?

The protocol allows enormous frames, but servers and proxies set limits to protect memory — often around 1 MiB by default in libraries like ws. For large payloads, fragment them or stream binary chunks and watch bufferedAmount.

Why does my connection drop after ~30–60 seconds of silence?

An idle connection is usually killed by a proxy or load balancer timeout. Add a heartbeat that sends traffic well within that window, and raise the proxy's read timeout above your heartbeat interval.

Does the browser reconnect automatically?

No. The native WebSocket never reconnects on its own — that's EventSource's job. You implement it yourself with exponential backoff.

Do I need socket.io?

Not necessarily. socket.io adds rooms, automatic reconnection, fallbacks and a Redis adapter — convenient, but it's its own protocol, not raw WebSocket. If you control both ends and want minimal overhead, the native API plus the patterns in this series is often enough.

Can I send JSON and binary on the same connection?

Yes. A single socket can carry both text and binary frames. On the client, check typeof event.data === "string" to tell them apart, and set binaryType to choose how binary arrives.

How many connections can one server hold?

Tens of thousands of idle sockets per Node process is realistic; the real limits are memory per connection and file descriptors. Measure your own message rate, then scale horizontally with sticky routing and a pub/sub backplane.

Does WebSocket work with HTTP/2 and HTTP/3?

Classic WebSocket runs over HTTP/1.1's upgrade. RFC 8441 defines bootstrapping it over HTTP/2, and support is uneven. In practice most deployments still upgrade over HTTP/1.1 at the edge proxy, which is well supported everywhere.

Частые вопросы

Короткие ответы на вопросы, которые присылают чаще всего. Развёрнутые версии — по ссылкам в уроках.

В чём разница между ws:// и wss://?

wss:// — это WebSocket поверх TLS, как https относится к http. В продакшене всегда используйте wss://: браузеры блокируют ws:// с защищённых страниц, а незашифрованные кадры читаемы всем на пути.

Есть ли максимальный размер сообщения?

Протокол допускает огромные кадры, но серверы и прокси ставят лимиты ради памяти — часто около 1 МиБ по умолчанию в библиотеках вроде ws. Для больших данных фрагментируйте их или стримьте бинарными чанками и следите за bufferedAmount.

Почему соединение рвётся после ~30–60 секунд тишины?

Простаивающее соединение обычно убивает таймаут прокси или балансировщика. Добавьте heartbeat, шлющий трафик внутри этого окна, и поднимите read-timeout прокси выше интервала heartbeat.

Браузер переподключается сам?

Нет. Нативный WebSocket никогда не переподключается самостоятельно — это работа EventSource. Вы реализуете это сами через экспоненциальный backoff.

Нужен ли мне socket.io?

Не обязательно. socket.io добавляет комнаты, авто-переподключение, фолбэки и Redis-адаптер — удобно, но это собственный протокол, а не «голый» WebSocket. Если вы контролируете обе стороны и хотите минимум накладных, нативного API плюс паттернов из этой серии часто достаточно.

Можно ли слать JSON и бинарные данные в одном соединении?

Да. Один сокет может нести и текстовые, и бинарные кадры. На клиенте проверяйте typeof event.data === "string", чтобы различать их, и задавайте binaryType для формата бинарных данных.

Сколько соединений держит один сервер?

Десятки тысяч простаивающих сокетов на процесс Node — реалистично; реальные ограничения — память на соединение и файловые дескрипторы. Измерьте свою частоту сообщений, затем масштабируйтесь горизонтально со sticky-маршрутизацией и шиной pub/sub.

Работает ли WebSocket с HTTP/2 и HTTP/3?

Классический WebSocket работает поверх upgrade из HTTP/1.1. RFC 8441 описывает его запуск поверх HTTP/2, но поддержка неравномерна. На практике большинство развёртываний по-прежнему делают upgrade по HTTP/1.1 на крайнем прокси — это поддержано везде.