websocket, nodejs, express.io (Вопросы)
Цитата: nanotek от 31.05.2016, 11:40Есть такие замечательные вещи как websocket, nodejs, express.io
Вчера установили nodejs и express.io хочу научиться работать с этим чудом так как реализовывать быстрые сообщения по типу vk и чат без перезагрузки через ajax и тянуть базу каждые 5 секунд не есть хорошо.Помогите ссылочкой на хороший урок.
Так же начал читать что то, но там написан запрос для проверки работоспособности по виду http://localhost:8888/ а как это с браузера пульнуть когда всё это установлено на серваке а не на моём пк? я так понял большая степень работы будет происходить через консоль?
Есть такие замечательные вещи как websocket, nodejs, express.io
Вчера установили nodejs и express.io хочу научиться работать с этим чудом так как реализовывать быстрые сообщения по типу vk и чат без перезагрузки через ajax и тянуть базу каждые 5 секунд не есть хорошо.
Помогите ссылочкой на хороший урок.
Так же начал читать что то, но там написан запрос для проверки работоспособности по виду http://localhost:8888/ а как это с браузера пульнуть когда всё это установлено на серваке а не на моём пк? я так понял большая степень работы будет происходить через консоль?
Цитата: VELIK505 от 31.05.2016, 15:46nanotek,
redis+node.js+socket.io.
открываешь сокет на 3000 порту допустимwindow.socket = io('http://mysite.com:3000/', {reconnection: true});;
сообщения все все пишешь ассинхронно в redis и mysql(допустим).
Пишешь серверный скрипт на ноде. В котором по сеттаймауту каждую секунду чекаешь инфу с редиса (задействие ресурсов будет 0.01%) выдаёшь в сокет он в свою очередь взаимодействует с клиентским js и в реал-тайме выводит инфу на экран. P.s. не забываем добавить редис в автозагрузку. Redis вешай не на порт а на сокеты обязательно если ходит локально (не удалённо). Сокет редиса (файл) пиши в tmpfsport 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. не забываем порт на котором висит сокет открыть в файрволе.
nanotek,
redis+node.js+socket.io.
открываешь сокет на 3000 порту допустим
сообщения все все пишешь ассинхронно в redis и mysql(допустим).
Пишешь серверный скрипт на ноде. В котором по сеттаймауту каждую секунду чекаешь инфу с редиса (задействие ресурсов будет 0.01%) выдаёшь в сокет он в свою очередь взаимодействует с клиентским js и в реал-тайме выводит инфу на экран. P.s. не забываем добавить редис в автозагрузку. Redis вешай не на порт а на сокеты обязательно если ходит локально (не удалённо). Сокет редиса (файл) пиши в tmpfs
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. не забываем порт на котором висит сокет открыть в файрволе.
Цитата: nanotek от 31.05.2016, 16:26VELIK505,
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)
VELIK505,
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)
Цитата: VELIK505 от 31.05.2016, 16:30Цитата: nanotekVELIK505,
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)
node глобально поставлено если через порты, репозитарии и тд и тп а можно вручную самому создать дирректорию и через npm поставить и нужные модули. Почитай про npm.
Нет если нет доступа доступа рута (root) то мало того что не о какой связке так и о нормальном двигле не может идти и речи даже!
Понимать ЯП идеально это очень и очень мало, по мимо этого надо понимать как это будет всё работать всё в той или иной ситуации для этого надо и понимать как работает серверная сторона софт и тд и тп.
Теперь ещё 2 вопроса, что значит внутреннее или глобальное окружение?
Можно подробнее? И ещё если у меня нет доступа к консоли, то я не смогу пользоваться этой связкой? (сервак просто не мой им делятся, я пока хочу научится а потом уже свой взять)
node глобально поставлено если через порты, репозитарии и тд и тп а можно вручную самому создать дирректорию и через npm поставить и нужные модули. Почитай про npm.
Нет если нет доступа доступа рута (root) то мало того что не о какой связке так и о нормальном двигле не может идти и речи даже!
Понимать ЯП идеально это очень и очень мало, по мимо этого надо понимать как это будет всё работать всё в той или иной ситуации для этого надо и понимать как работает серверная сторона софт и тд и тп.