Ответ 1
Там очень простая реализация Socket.IO клиента для Node.js. Это не настоящий инструмент бенчмаркинга, но он знает о протоколе Socket.IO.
Используя это, довольно легко написать клиент, который взаимодействует с вашим приложением.
Я тестирую масштабируемость приложения websockets, которое я написал, используя socket.io и Node.js. Я хочу подчеркнуть тест и сравнить производительность. Какие инструменты я могу использовать?
До сих пор я изучал wsbench, но я хотел бы изучить любые альтернативы.
Там очень простая реализация Socket.IO клиента для Node.js. Это не настоящий инструмент бенчмаркинга, но он знает о протоколе Socket.IO.
Используя это, довольно легко написать клиент, который взаимодействует с вашим приложением.
Провел день, глядя на бенчмаркинг 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 письма).
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
Для простого сравнения количества параллельных подключений я бы рекомендовал wsbench. Однако он не будет работать на сайтах Socket.IO(потому что более сложное рукопожатие). Я изучал его и нашел несколько инструментов, которые только что установили соединения с сервером Socket.IO. Этого недостаточно для измерения реальной производительности. Вам нужно отправлять и получать реальные сообщения, имитирующие реального клиента вашего веб-приложения. Я описал некоторые идеи о том, как создать свой собственный тест здесь: Бенчмаркинг для сайтов Node.JS/Socket.IO