Как проверить количество открытых соединений в node.js?

У меня есть машина под управлением node.js (v0.1.32) с tcp-сервером (tcp.createServer) и http-сервером (http.createServer). HTTP-сервер подвергается воздействию длинных запросов на опрос (продолжительностью 50 секунд каждый) от приложения на основе кометы на порту 80. И для этого используются соединения tcp-сокета на порту 8080 от приложения iphone.

Было обнаружено, что сервер некоторое время не мог обрабатывать больше соединений (особенно соединений tcp, в то время как соединения http выглядели нормально!!??) и работал нормально только после перезагрузки.

Для нагрузочного тестирования соединений я создал tcp-сервер и породил 2000 запросов и выяснил, что соединения начинают обрываться после достижения максимального ограничения дескриптора файла на компьютере (по умолчанию 1024). Что на самом деле очень мало.

Итак, начинающий вопрос: как мне масштабировать мое приложение, чтобы обрабатывать большее количество соединений в node.js, и как я могу решить эту проблему.

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

Спасибо Шариф

2 ответа

Решение

Привет, Джои! Я искал решение для Unix, которое помогло бы мне определить, сколько открытых соединений в данный момент в любой момент на моей машине. Причина была в том, что мой сервер не смог обработать запросы после определенного количества соединений. И решил, что моя машина может обрабатывать только 1024 открытых соединения одновременно, т.е. значение дескриптора файла ulimit, которое по умолчанию равно 1024. Я изменил это значение, установив ulimit -n, который соответствует моим требованиям.

Таким образом, чтобы проверить открытые соединения, я использовал lsof, который дает мне список открытых файлов и вычисляет, сколько соединений открыто через каждый порт, который я использовал.

Вы можете получить количество подключений, используя следующее:

var server = http.createServer(app);     
server.getConnections(function(error, count) {
    console.log(count); 
});

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

Я не знаю, есть ли встроенный способ получить количество активных соединений с Node, но это довольно легко подстроить.

Для моего приложения Node в стиле кометы я сохраняю объект, к которому я добавляю соединения, как свойство. Каждые X секунд я перебираю этот объект и смотрю, есть ли какие-либо соединения, которые должны быть закрыты (в вашем случае, что-либо, превышающее ваш 50-секундный лимит).

Когда вы закрываете соединение, просто удалите это свойство из объекта соединения. Затем вы можете увидеть, сколько соединений открыто в любое время с Object.size(connections)

Другие вопросы по тегам