Для масштабирования сокета io требуется несколько экземпляров на нескольких портах. или один порт? - PullRequest
0 голосов
/ 20 января 2019

Я немного запутался при масштабировании socket.io. Особенно когда в игру вступает Nginx, я читаю несколько потоков, в которых говорится о разных портах. По моей логике, нужно делать больше экземпляров серверов Socket Io на разных портах, чтобы балансировщик нагрузки Nginx располагал их на вышестоящих узлах, верно?

Допустим,

let http = require('http').Server(app);
let io = require('socket.io')(http);

io.on('connect', function (socket) {

});

http.listen(7000, function () {
    // Now listening
});

let http2 = require('http').Server(app);
let io2 = require('socket.io')(http2);

http2.listen(7001, function () {
    // Now listening
});

io2.on('connect', function(socket){

});
// And on making 7002, 7003

А на сервере Nginx

upstream nodes {  
    server 127.0.0.1:7001;
    server 127.0.0.1:7002;
    server 127.0.0.1:7003;
}
server {  
    listen 7000;

А затем с помощью Redis Pub / Sub я бы заставлял эти серверы Socket IO на разных портах публиковать и подписываться друг на друга, чтобы он выглядел как одна большая чат-комната. Так вот как я понял, пожалуйста, поправьте меня, если я ошибся.

Потому что я запутываюсь, когда читаю комментарии, такие как ответ по этой ссылке Масштабируемая архитектура для socket.io или сама страница Nginx https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/, где балансировка нагрузки происходит в одном порту. Может ли кто-нибудь объяснить мне, если я все понял неправильно, как можно добиться балансировки нагрузки на одном порту? Если сокет io уже происходит на одном порту, зачем нужен баланс нагрузки? Я просто не понимаю. Как балансировка нагрузки на одном порту может изменить обработку больших запросов на сокете? (если все, что я собираюсь сделать, это создать программу для чата с сокетом io, которая является приложением с одним узлом, а остальная часть моей веб-страницы основана на php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...