Как сделать более 65 тыс. Запросов на порт

У меня есть простой узел js веб-сокет-сервер следующим образом:

var ws = require("nodejs-websocket")
var connectionCount = 0;
console.info("Node websocket started @ 8001");

var server = ws.createServer(function (conn) {;
    console.log("New connection", ++connectionCount);
    conn.on("close", function (code, reason) {
        console.log("Connection closed")
    });
}).listen(8001)

Этот сервер принимает 65 тыс. Подключений (так как один порт занимает не более 65 тыс. Подключений). Как я могу масштабировать сервер так, чтобы он мог принимать более 100 тыс. Соединений?

Недавно я открыл три таких сервера с разными портами и попытался выполнить балансировку нагрузки с помощью nginx, но безрезультатно, поскольку сервер nginx также мог принимать только 65 тыс. Соединений. Конфигурация nginx находится здесь

upstream localhost {
    server localhost:8001;
    server localhost:8002;
    server localhost:8003;
}


server {
    proxy_read_timeout 3600s;
    listen 8000;
    location / {
            proxy_pass http://localhost;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
}

Порт 8000 может принимать только 65 тыс. Соединений.

Как с такими ситуациями справляются в реальном времени. Я любитель и мне нужен хороший указатель для масштабирования сервера. Решение не должно использовать nginx. Это может быть что угодно. Я просто хочу знать, как справиться с такими проблемами. Подробные ответы приветствуются. Благодарю.

1 ответ

Ограничение в 65535 портов действует только для исходящих соединений, но не для входящих.

Операционная система однозначно идентифицирует соединение / сокет по этим четырем свойствам:

  • IP-адрес источника
  • исходный порт TCP
  • IP-адрес сервера
  • TCP-порт сервера

Таким образом, для одного IP-адреса ваш сервер Node.js или Nginx может поддерживать не более 65535 соединений. Для разных клиентских IP-адресов единственными ограничениями являются ресурсы процессора и оперативной памяти вашего сервера.

Может быть, вы проверили это поведение с одного клиента? В этом случае вы столкнулись с ограничением исходных портов TCP. Попробуйте выполнить тестирование с разных клиентов, и ваш сервер должен нормально работать с более чем 65535 подключениями.

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