Может подключать 100 тыс. одновременных пользователей в сокете.ио node.js возможно ли

#javascript #node.js #websocket #socket.io

Вопрос:

Я новичок в сокете.io в узлах . у меня были сомнения, сколько одновременных подключений я могу подключить к своему приложению nodejs и возможно ли одновременно подключить 100 тыс. пользователей . мой код работает нормально

мой код

 io.on('connection', (socket) => {
    socket.on('joinroom', ({ username, room }) => {
        const user = userjoin(socket.id, username, room);
        socket.join(user.room);
        socket.emit('message', formatmessage('bot', 'Welcoming by bot'));
        socket.broadcast.to(user.room).emit('message',formatmessage(' bot',`${user.name} just joined`));
    });
    socket.on('chatMessage', (msg) => {
        const user = getCurrntuser(socket.id);
        io.to(user.room).emit('message',formatmessage(user.name,msg));
    });
     socket.on('disconnect',()=>{
        const user = userLeave(socket.id);
        if (user) {
            io.to(user.room).emit('message',formatmessage('bot',`${user.name} just now disconnected`));       
        }        
    });
});
 

У кого-нибудь была идея, как возможна любая связь в одно и то же время !
спасибо за вашу помощь

Ответ №1:

На этот вопрос трудно ответить, потому что он зависит от машины, на которой выполняется код, и интенсивности связи.

Но я хотел бы отметить, что вопрос должен быть больше похож на «Как поддерживать большое количество клиентов, использующих NodeJS», потому что сегодня это 100 тыс., завтра 10 тыс. или 1 млн.

Вам следует изучить архитектуру микросервисов и решения для масштабирования. Основная суть заключается в том, что вам нужна возможность добавлять больше реплик одной и той же службы без сохранения состояния, когда вам нужно поддерживать больше пользователей/подключений. Это может быть достигнуто при использовании балансировщика нагрузки и микросервиса без состояния.

Я знаю, что это не прямой ответ на вопрос, но я надеюсь, что это направит вас на правильный путь для решения проблемы.

Комментарии:

1. если я арендую мощную машину, мне нужно сбалансировать ее нагрузку ?

2. С помощью JS вы должны. Из-за того, что JS является однопоточным, его всегда полезно копировать. С помощью внешних языков программирования вам потребуется увеличить пул потоков (но их репликация также работает).

Ответ №2:

Архитектура микросервисов решает подобные проблемы масштабируемости. Это проблемы, с которыми вы столкнулись бы не только в NodeJS, но и на других языках. Я считаю, что решением в вашем случае является работа с балансировщиком нагрузки, масштабирующим ваш сервис. взгляните на https://pm2.keymetrics.io/docs/usage/quick-start/

Комментарии:

1. я не знаю , как масштабировать свой проект, нормально ли запускать это приложение на одном сервере (с высоким процессором и оперативной памятью)?

2. Вы можете масштабировать свой проект, создав несколько экземпляров на одном сервере или на разных серверах. Это необходимо в однопоточных языках, таких как NodeJS. Прочитайте о PM2 там (ссылка для ответа), чтобы лучше понять, как это работает