Я немного запутался при масштабировании 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)