Подтвердить что ты не робот

Сколько данных я могу отправить через socket.emit?

Итак, я использую node.js и socket.io. У меня есть эта небольшая программа, которая берет содержимое текстового поля и отправляет его на сервер node.js. Затем сервер передает его обратно другим подключенным клиентам. Вроде как чат-сервис, но не совсем.

В любом случае, что, если пользователь должен был напечатать текст на 2-10 тыс. и попытаться отправить его? Я знаю, что я мог бы просто попробовать это и убедиться сам, но я ищу практическое, лучшее практическое ограничение на то, сколько данных я могу сделать с помощью эмиссии.

4b9b3361

Ответ 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 секунд.

Так что, на самом деле, это сводится к нескольким вопросам, в порядке важности:

  • Сколько пропускной способности будет иметь ваш сервер (ы)?
  • Сколько пользователей будет одновременно подключено?
  • Сколько сообщений будет отправлено за минуту?

С ответами на эти вопросы вы можете определить максимальный размер сообщения, которое будет поддерживать ваша инфраструктура.

Ответ 2

2-10k в порядке, никаких каких-либо принудительных ограничений или чего-либо еще, это просто сводится к пропускной способности и практичности. 10k мало, хотя в великой схеме вещей, поэтому вам должно быть хорошо, если это что-то вроде верхнего для вас.