2016-11-01 11 views
0

У меня есть простой узла сервера веб-расслоение плотной сокетов следующим образом:Как сделать больше, чем 65k запрос на порт

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) 

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

Недавно я открыл три таких сервера с разными портами и попытался выполнить балансировку нагрузки с помощью nginx, но безрезультатно, поскольку сервер nginx также мог принимать только 65k-соединения. Конфигурация 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. Это может быть что угодно. Я просто хочу знать, как справляться с такими проблемами. Подробные ответы приветствуются. Благодарю.

ответ

2

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

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

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

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

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

+0

Да, я пробовал у того же клиента. Я посмотрю на это и дам вам, ребята, знать. Ур. Спасибо. – CuriousMind