nanotek,
redis+node.js+socket.io.
открываешь сокет на 3000 порту допустим
window.socket = io('http://mysite.com:3000/', {reconnection: true});;
сообщения все все пишешь ассинхронно в redis и mysql(допустим).
Пишешь серверный скрипт на ноде. В котором по сеттаймауту каждую секунду чекаешь инфу с редиса (задействие ресурсов будет 0.01%) выдаёшь в сокет он в свою очередь взаимодействует с клиентским js и в реал-тайме выводит инфу на экран. P.s. не забываем добавить редис в автозагрузку. Redis вешай не на порт а на сокеты обязательно если ходит локально (не удалённо). Сокет редиса (файл) пиши в tmpfs
port 0
unixsocket /dev/shm/redis.sock - моя tmpfs дирректория
unixsocketperm 777
через
forever запускаешь ноду (скрипты). Вешаешь на крон раз в сутки ребут forever (иначе будет утечка ОЗУ сильная).
https://toster.ru/q/291623 (мой пост читани). Не забывай запускать серверные скрипты
ноды с флагом --expose-gc - он будет подчищать утечку! P.s. не забываем forever кинуть на крон при перезагрузке.
Так же советую почитать мой другой пост когда я столкнулся с проблемой нагрузки от node.js на cpu ядро = 100%.
https://toster.ru/q/284804 (тоже мой пост старый).
Так же я столкнулся с проблемой с падением сокета по таймауту при онлайне 3000-4000к человек он просто не вывозил. Конечно ты можешь расширить
port_range (диапозон портов) и рандомить порты на клиентской стороне, но это не вариант так как сокет на 1ом порту может принять до 1 000 000 онлайна соединений.
Я решил это так:
/etc/security/limits.conf
nodejs soft nofile 1000000
nodejs hard nofile 1000000где nodejs - пользователь из под которого запускаешь серверные скрипты ноды!
если centos то тут /etc/security/limits.d можешь в ноупроке снять ограничение на рута: root soft nproc unlimited
Теперь о самой node.js без разницы в каком окружение ты её поставишь во внутреннем или в глобальном (но я предпочитаю внутреннее окружение). Обязательно делай
кластеризацию node.js https://nodejs.org/api/cluster.html
Бей на воркеры = кол-ву ядер твоего процессора где крутиться приложение дабы вся нагрузка не ложилась на первое ядро. Впринципе в моих постах что я дал ссылки всё это есть и показано как делать кластеризацию node.js если ты внимательно всё почитаешь и под спойлером все коменты то ты всё поймёшь.
P.s. не забываем порт на котором висит сокет открыть в файрволе.