Ответ 1
Node и socket.io не имеют встроенных ограничений. На что вам приходится беспокоиться, так это соотношение между размером сообщения, количеством отправляемых сообщений в секунду, количеством подключенных клиентов и пропускной способностью, доступной вашему серверу – Другими словами, нет простого ответа.
Рассмотрим сообщение 10 кБ. Когда подключено 10 клиентов, это составляет 100 килобайт данных, которые ваш сервер должен вытолкнуть, что вполне разумно. Добавьте больше клиентов, и все быстро становится более требовательным: 10 кБ * 5000 клиентов = 50 МБ.
Разумеется, вам также придется учитывать количество накладных расходов протокола: каждый пакет добавляет ~ 20 байтов, IP добавляет 20 байтов, а Ethernet добавляет 14 байтов, всего 54 байта. Предполагая MTU 1500 байт, вы смотрите на 8 пакетов на клиента (без учета повторных передач). Это означает, что вы отправите 8 * 54 = 432 байта служебных данных + полезную нагрузку 10 килобайт = 10 672 байта на одного клиента по кабелю.
10,4 кБ * 5000 клиентов = 50,8 МБ.
На линии со скоростью 100 Мбит/с вы изучаете теоретический минимум в 4,3 секунды, чтобы доставить сообщение 10 000 к 5000 клиентам, если вы можете насытить эту ссылку. Конечно, в реальном мире упавших пакетов и поврежденных данных, требующих повторных передач, это займет больше времени.
Даже с очень скромной оценкой в 8 секунд для отправки от 10 кБ до 5000 клиентов, это, вероятно, прекрасно в чате, где сообщение приходит через каждые 10-20 секунд.
Так что, на самом деле, это сводится к нескольким вопросам, в порядке важности:
- Сколько пропускной способности будет иметь ваш сервер (ы)?
- Сколько пользователей будет одновременно подключено?
- Сколько сообщений будет отправлено за минуту?
С ответами на эти вопросы вы можете определить максимальный размер сообщения, которое будет поддерживать ваша инфраструктура.