@serious911

Нагрузочное тестирование Socket.IO / SockJS?

Здравствуйте.

Подскажите, пожалуйста, как протестировать NodeJS + Websockets (Socket.IO/SockJS)?

На небольшом сервере Ubuntu 14.04 LTS установлено NodeJS 4.4.4 и на 8081 порту запущено 2 приложения на Express + Socket.IO и SockJS. Необходимо проверить, что все работает нормально + проверить как будет вести себя приложение под нагрузкой (минимум 100 одновременных соединений). На данном этапе приложение очень простые типа Hello World, но все будет постепенно усложнятся. Клиент просто подключается к сокету и выводит в консоль все сообщения.

Код server.js (SockJS):
var http = require('http');
    var sockjs = require('sockjs');

    var echo = sockjs.createServer({ sockjs_url: 'http://cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js' });
    echo.on('connection', function(socket) {
        socket.write('connected');
        socket.write('Hello world');

        socket.on('close', function() {
            socket.write('disconnected');
        });
    });

    var server = http.createServer();
    echo.installHandlers(server, {prefix:'/websocket'});

    server.listen(8081, '0.0.0.0');


Код server.js (Socket.io+ Express):
var express = require('express')();
    var http = require('http').Server(express);
    var io = require('socket.io')(http, {path: '/websocket'});

    io.on('connection', function (socket) {
        io.emit('message', 'connected');
        io.emit('message', 'Hello world');
    });

    express.get('/index.html', function (req, res) {
        res.sendFile(__dirname + '/index.html');
    });

    express.get('/socket.io.js', function (req, res) {
        res.sendFile(__dirname + '/socket.io.js');
    });

    http.listen(8081, '0.0.0.0');


Нужна очень простая (желательно консольная) и работоспособная утилита для Ubuntu/MacOS, которая может генерировать соединения на вебсокеты. Пробовал использовать wsbench, thor, odin-ws и несколько других утилит с GitHub, но ничего проверить так и не получилось. В основном или не запускается после установки или выводит ошибки.

node wsbench -c 100 -r 10 ws://******de.net:8081/websocket

/home/n****t/wsbench/lib/optparse.js:144
while(l-- > 0) if(LONG_SWITCH_RE(arr[l])) return true;
^
TypeError: object is not a function
at contains_expr (/home/nan***1t/wsbench/lib/optparse.js:144:23)
at build_rules (/home/n**m1t/wsbench/lib/optparse.js:77:13)
at Object.OptionParser.parse (/home/nan**t/wsbench/lib/optparse.js:224:21)
at Object. (/home/n*****t/wsbench/wsbench:113:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)


thor --amount 1 ws://******de.net:8081/websocket

Connecting to ws://******.net:8081/websocket

Online 618 milliseconds
Time taken 618 milliseconds
Connected 0
Disconnected 0
Failed 1
Total transferred 0B
Total received 0B

Durations (ms): min mean stddev median max
Handshaking NaN NaN NaN NaN NaN
Latency NaN NaN NaN NaN NaN

Percentile (ms): 50% 66% 75% 80% 90% 95% 98% 98% 100%
Handshaking NaN NaN NaN NaN NaN NaN NaN NaN NaN
Latency NaN NaN NaN NaN NaN NaN NaN NaN NaN

Received errors:
1x socket hang up


Подключится через браузер к вебсокету и увидеть Hello World получилось, но протестировать не удается.

Поделитесь, пожалуйста, рабочими примерами/утилитами/ссылками для тестирования Socket.io/SockJS.

Спасибо.
  • Вопрос задан
  • 3252 просмотра
Пригласить эксперта
Ответы на вопрос 3
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
https://gist.github.com/S-anasol/3eaf154e2beb5ca1c...
Вот пример для socket.io

1. Ставим нужный websocket клиент для nodejs
2. Пишем скрипт который делает нужное количество коннектов
3. ...
4. Профит
Ответ написан
Комментировать
urtow
@urtow
*nix, python, QA, bagpipe, folk music
https://github.com/observing/thor

Вот готовый тул для нагрузки Websocket. Я думаю прикрутить его к Socketio не проблема.
Ответ написан
@sawa4
Установил на ubuntu socket io в проект Laravel.
Как узнать на каком порту работает сервер сокета? по умолчанию вроде 80
Но приложение выкидывает GET laravel/socket.io 404 Not Found
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы