Форум

Навигация Форума
Вы должны войти, чтобы создавать сообщения и темы.

websocket, nodejs, express.io (Вопросы)

Есть такие замечательные вещи как websocket, nodejs, express.io
Вчера установили nodejs и express.io хочу научиться работать с этим чудом так как реализовывать быстрые сообщения по типу vk и чат без перезагрузки через ajax и тянуть базу каждые 5 секунд не есть хорошо.

Помогите ссылочкой на хороший урок.

Так же начал читать что то, но там написан запрос для проверки работоспособности по виду http://localhost:8888/ а как это с браузера пульнуть когда всё это установлено на серваке а не на моём пк? я так понял большая степень работы будет происходить через консоль?

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. не забываем порт на котором висит сокет открыть в файрволе.

VELIK505,
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)

Цитата: nanotek
VELIK505,
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)


node глобально поставлено если через порты, репозитарии и тд и тп а можно вручную самому создать дирректорию и через npm поставить и нужные модули. Почитай про npm.
Нет если нет доступа доступа рута (root) то мало того что не о какой связке так и о нормальном двигле не может идти и речи даже!
Понимать ЯП идеально это очень и очень мало, по мимо этого надо понимать как это будет всё работать всё в той или иной ситуации для этого надо и понимать как работает серверная сторона софт и тд и тп.

Авторизация
*
*
Регистрация
*
*
*
Генерация пароля