Как сделать более 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 подключениями.