#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 там (ссылка для ответа), чтобы лучше понять, как это работает