Как я могу сопоставить приложение Node.js на основе websocket?

Я тестирую масштабируемость приложения websockets, которое я написал, используя socket.io и Node.js. Я хочу подчеркнуть тест и сравнить производительность. Какие инструменты я могу использовать?

До сих пор я изучал wsbench, но я хотел бы изучить любые альтернативы.

Ответы

Ответ 1

Там очень простая реализация Socket.IO клиента для Node.js. Это не настоящий инструмент бенчмаркинга, но он знает о протоколе Socket.IO.

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

Ответ 2

Провел день, глядя на бенчмаркинг node.js и socket.io, я попробовал ряд решений, я обнаружил, что вы не можете использовать wsbench to benchmark socket.io, потому что у socket.io есть свой собственный протокол, который необходимо адресовать для соединения.

Попробовав несколько других решений без везения, я закончил использование socket.io-benchmark, и я просто ударил 60 000 подключений на экземпляре m1.large EC2, используя только одно ядро с комнатой для запасных. В моем случае я только хотел измерить накладные расходы на соединения socket.io(что требовало от меня комментировать код в socket.io-benchmark), поэтому у меня не было сообщений, отправленных между клиентом и сервером.

Было интересно видеть, что клиенты занимали больше CPU и памяти, чем сервер. Поэтому убедитесь, что клиентский сервер, с которым вы сравниваете, является многообещающим, я использовал EC2 c1.xlarge и имел много головной комнаты. И я разбил бенчмарк на 6 отдельных процессов, чтобы он мог масштабироваться по нескольким ядрам и избегать ограничений памяти.

Следите за тем, чтобы параметр <rampup in seconds> был достаточно высоким для клиентов, если вы установите его на низкое количество буферов и прерываний для остановки.

Единственная проблема с socket.io-benchmark заключается в том, что мне пришлось использовать node v0.4.12, чтобы заставить все это работать из-за зависимости от v8-профилировщика, который не будет компилироваться в новых версиях node (as письма).

Ответ 3

https://www.npmjs.org/package/thor

Это утилита командной строки и имеет аналогичный вывод как Apache Bench

Thor:                                                  version: 1.0.0

God of Thunder, son of Odin and smasher of WebSockets!

Thou shall:
- Spawn 1 workers.
- Create 2 concurrent/parallel connections.
- Smash 100 connections with the mighty Mjölnir.

The answers you seek shall be yours, once I claim what is mine.

Connecting to ws://server:8080/examples/websocket/chat

  Opened 100 connections


Online               439 milliseconds
Time taken           441 milliseconds
Connected            100
Disconnected         0
Failed               55
Total transferred    132.62kB
Total received       71.85kB

Durations (ms):

                     min     mean     stddev  median max
Handshaking          1       5             3       4 20
Latency              0       0             1       0 3

Percentile (ms):

                      50%     66%     75%     80%     90%     95%     98%     98%    100%
Handshaking          4       5       5       6       7       11      17      20      20
Latency              0       0       1       1       1       1       1       2       3

Ответ 4

Для простого сравнения количества параллельных подключений я бы рекомендовал wsbench. Однако он не будет работать на сайтах Socket.IO(потому что более сложное рукопожатие). Я изучал его и нашел несколько инструментов, которые только что установили соединения с сервером Socket.IO. Этого недостаточно для измерения реальной производительности. Вам нужно отправлять и получать реальные сообщения, имитирующие реального клиента вашего веб-приложения. Я описал некоторые идеи о том, как создать свой собственный тест здесь: Бенчмаркинг для сайтов Node.JS/Socket.IO