Итак, я просто хочу узнать, сколько событий может обработать socket.io?
Во-первых, не ясно, сколько вы говорите о том, сколько обработчиков событий в сокете.Сервер io может иметь или вы спрашиваете, сколько событий в реальном времени (как в событиях / сек) может обрабатывать сервер socket.io.
В первом элементе нет кодированного ограничения на то, какмногие обработчики событий, которые может обрабатывать сервер socket.io.Сокет происходит от EventEmitter и использует возможности прослушивателя EventEmitter, чтобы позволить кому-то прослушивать события.Для этой инфраструктуры нет закодированных ограничений и даже нет практического ограничения, поскольку это довольно легкая система.
В целом, система, для которой требуются тысячи отдельно закодированных прослушивателей событий, вероятно, может быть разработана более эффективно, другими способами., но нам нужно увидеть больше подробностей о том, что вы делаете, чтобы знать, как давать более конкретные рекомендации.
Что касается того, сколько сообщений в секунду может обрабатывать сервер socket.io, то это полностьюзависит от того, что сервер делает для обработки каждого сообщения, какой пропускной способности имеет ваш сервер, насколько быстро ваш сервер обрабатывает каждое сообщение и т. д.
Если вы не загружаете свой сервер десяткамиТысячи сообщений одновременно или выполняя тяжелую обработку каждого сообщения, я бы предположил, что трудности вашего сервера, вероятно, связаны с другими частями кода вашего сервера (вероятно, в том, что вы делаете, когда приходят сообщения и как вы их обрабатываете).
Мне также хотелось бы знать, не создали ли вы какой-то круговой цикл обработки сообщений, где clientA выдает msgA на сервер.Сервер получает это сообщение, обрабатывает его и отправляет msgB клиенту A.clientA получает это сообщение, выполняет некоторую его обработку, и некоторый побочный эффект этой обработки заставляет его снова отправлять msgA на сервер, и вы можете получить бесконечный цикл обработки сообщений.
Кроме того, комнаты в socket.ioне «иметь события» или «получать события», так что часть вашего описания не имеет смысла.Вы можете отправить событие на все розетки в комнате.Но на самом деле это просто заставляет сервер перебирать всех членов данной комнаты и отправлять им каждому сообщение по отдельности.
В соответствии с вашим редактированием, если «событие» таково:
io.on('event', function(msg){
console.log( msg);
});
Затем количество событий, которые ваш сервер может обрабатывать в секунду, зависит от всевозможных переменных конфигурации системы (пропускная способность, производительность процессора, производительность базы данных и т. Д.) И от того, сколько обработки вы выполняете для обработки каждого входящего события.,Вот список того, что нужно сделать:
- Убедитесь, что у вас нет синхронного ввода-вывода где-либо на вашем сервере, кроме как во время запуска сервера, так как это мгновенно разрушит вашу способность иметь многообрабатывать события происходящие сразу.
- Сделать код, который обрабатывает каждое событие максимально эффективным.Если вы обращаетесь к базе данных по каждому событию, это, вероятно, сделает вашу базу данных узким местом.
- Разработайте несколько тестов, чтобы выяснить, где находится ваше первое узкое место в обработке.
- Улучшениеэксплуатационные характеристики этого первого узкого места.
- Ополаскивайте, вспенивайте, пока не удалите / не улучшите первые N мест, в которых вы столкнулись с узким местом.
Имейте в виду, что одинЭкземпляр node.js имеет только один поток, в котором выполняется ваш Javascript.Таким образом, если вы хотите иметь возможность обрабатывать 100 сообщений в секунду, вы можете использовать не более 10 мс ЦП для обработки каждого сообщения (1000 мс / сек, деленное на 100 сообщений / сек = 10 мс / сообщение).Вы можете развернуть несколько ЦП, внедрив кластеризацию или запустив несколько процессов для обработки рабочей очереди, если ЦП является фактическим узким местом, но сначала вам нужно будет определить это с помощью тестирования.