Вопрос по socket.io, websocket, benchmarking, node.js – Benchmarkt socket.io

5

Я хочу сравнить мой сервер socket.io. Я хочу проверить, сколько параллельных соединений и сообщений может обработать сервер.

Но мой сервер socket.io зависает через несколько минут, когда я запускаю тест с примерно 200 веб-сокетами.

Я попытался использовать кластерный модуль node.js, чтобы разделить процесс с ядрами. Когда я использую модуль кластера, через некоторое время некоторые соединения отключаются.

Сервер, который я использую для теста, является виртуальным сервером в облаке Amazon с такими свойствами:

7 GB of memory 20 EC2 Compute Units (8 virtual cores with 2.5 EC2 Compute Units each) 1690 GB of instance storage 64-bit platform I/O Performance: High API name: c1.xlarge

Вот код эталонного клиента:

var fs = require('fs');
var io = require("socket.io-client");
var host = "http://localhost:3000";
var timeLog = fs.createWriteStream(__dirname+'/public/time.log',{flags:'a',mode:0666,   encoding:'encoding'});
var count = 200;
var sockets = [];
var total = 0;
var countTime = 0; 
var echo = exports;
echo.start = function() {
    fs.writeFile('public/time.log',"",function(err){
        if(err) throw err;
    });

    for(var i=0;i<count;i++){
        var socket = io.connect(host,{"force new connection":true});
        sockets.push(socket);
        //console.log(i);
        socket.on("message",function(message){
            countTime++;
            time = new Date().getTime()-message;
            total+=time;
            timeLog.write(time+"\n");
            socket.send(new Date().getTime());
        });
        socket.on("disconnect",function(){
            console.log("disconnect");
        });
    }

    parallelSockets();
    var j = 0;
}

function parallelSockets(){
    for(var i = 0 ;i<count;i++){
        sockets[i].send(new Date().getTime());
    }
}

А вот код сокета .io-сервера:

socket.on('message',function(message){
    start = new Date().getTime();
    socket.send(message);
    end = new Date().getTime() - start;
    logfile.write(end+"\n");
});

Есть ли в socket.io какие-либо механизмы безопасности, которые блокируют столько параллельных сообщений и соединений, образующих клиента?

Кто-нибудь может мне помочь?

Какую ошибку node.js выдает при сбое? Vadim Baryshev
моя вылетает из-за ошибки 1 минута или 2 минуты: еще выдает новую ошибку («не открыт»); из Websocket.js в модуле socket.io-client. Я думаю, что-то не так с socket.io-клиентом. Maziyar
node.js печатает только в случае сбоя слово «убито». CodeChiller
Я сталкиваюсь с той же проблемой. Вы нашли какое-нибудь решение для этого? Я тестирую свой тест узлов на моем MacBook Pro. Я установил лимит U. но ничего не изменилось. По-прежнему появляется сообщение "Невозможно вызвать метод" полезной нагрузки ". из нуля & quot; после 200-250 подключений. Ali Ersöz
Это может быть просто потому, что у вас заканчиваются файловые дескрипторы. Попробуйте запуститьulimit -n как тот же пользователь, который запускает node.js (если вы работаете в Linux, по крайней мере). Вы можете изменить это значение, используяulimit или, более постоянно, в файле конфигурации, таком как/etc/security/limits.{conf,d}. Linus Gustav Larsson Thiel

Ваш Ответ

3   ответа
0

Он открывает одновременные сокеты для сервера и прослушивает данное сообщение и распечатывает их

http://github.com/sonsuzdongu/akinji

python akinji.py -c 100 --host localhost --port 3000 --waitFor 100 --on "some msg"
2

но знаю 2 хороших ресурса, которые могут вам помочь, поэтому проверьте их:

http://drewww.github.com/socket.io-benchmarking/ http://blog.mixu.net/2011/11/22/performance-benchmarking-socket-io-0-8-7-0-7-11-and-0-6-17-and-nodes-native-tcp/
4

Я протестировал реализации серверов Socket.IO и SockJS.

Результаты можно найти здесь:http://mrjoes.github.com/2011/12/15/sockjs-bench.html

Тестовый пакет здесь:https://github.com/mrjoes/sock-benchmarking

Написан на Java, поддерживает 3 транспорта: Socket.IO 0.7+, SockJS 0.2+, необработанные веб-сокеты. Там нет скомпилированного двоичного файла, но вы можете заставить Eclipse скомпилировать его или просто использовать командную строку javac.

@Joes был ваш тест на 45k в секунду на узел на ядро или кластер? Изменить: Nevermind: "с использованием одного ядра", вау, 45 тыс. Исходящих? Это безумие. Спасибо за тест !!
Убедитесь, что вы увеличиваете лимиты, как описано здесь:serverfault.com/questions/48717/…
Спасибо за ваш ответ, у меня есть один вопрос. Как вы сделали Socket.io Benchmark с 2000 WebSockets? Я только могу открыть около 1000 розеток. Если я захочу открыть больше, сервер будет разбит или недоступен. CodeChiller

Похожие вопросы