1 Отредактировано IgorN (2013-02-05 23:02:11)

Тема: Node.js

Всем привет! Стоит задачка на сайте показывать уведомления в реалтайм. Т.е. Pub/Sub
Есть модуль для редиса в котором пример по реализации.
Как раз решил познакомиться с Node.js.
Но, что то пока не понятен один момент.
Сервер апач, который проксирует запросы на node.js. Настроил соответствующий RewriteRule.
Тестовый примерчик(сервер с простым роутингом) по какой то статье сделал.
Во вьюшке проверил работу через jquery ajax запрос на нужный урл.
Вроде работает.
Но получился не чистый node, а значит пример с Pub/Sub работать то не будет.
Т.е. я могу дернуть адрес и добавить пользователя в подписчики на канал, но дергать что бы проверить если сообщения смысла нет, полезность node.js теряется.
Если я правильно понял, то node.js должен мне событие протолкнуть в браузер, а сделать по идее он это не может, постоянного конекта то нет.

Или я уже туплю под конец дня...

Кто что подскажет?
Спасибо!

Я люблю то, что делаю и делаю то, что люблю.

2

Re: Node.js

Опач надо исключить, коннекты к Ноде гонять напрямую через какой-нить сокет.ио, или Комет, если хочется поизвращаться. Самый простой вариант - повесить Ноду на другой порт и выполнять запросы с клиента туда.

3

Re: Node.js

Для постоянного коннекта нужно юзать WebSocket.

http://socketo.me/ -- сервер WS для PHP, с поддержкой симфони2 сессий, в основе лежит reactphp (он же клон node.js). На сайте есть полное описание как наладить соединение фронтенда и бекенда несколькими способами. Так-же предоставляет реализацию WAMP протокола для серверной стороны.

http://autobahn.ws/js -- реализация WAMP протокола для JS, так-же упоминается в доках по ссылке из предыдущего пункта.

https://github.com/nrk/predis-async -- асинхронный redis клиент, для использования вместе с reactphp.

http://nginx.org/  -- для проксирования конечно же default/wink

P.S. для совместимости с древними версиями браузеров есть костыли через flash и тому подобное, но сильно не вникал в эту тему.

Весело тут у вас.

4

Re: Node.js

relo_san пишет:

Опач надо исключить, коннекты к Ноде гонять напрямую через какой-нить сокет.ио, или Комет, если хочется поизвращаться. Самый простой вариант - повесить Ноду на другой порт и выполнять запросы с клиента туда.

Кажись ты об этом http://stackoverflow.com/questions/6891 … php-nodejs
Надыбал вчера эту статейку.
Нода весит на локалхосте 8888 порт, сделал мини сервер по статейке.
Апач только проксирова запросы аля $.ajax({
  url: "nodejs/start"
...
})

RewriteRule ^nodejs/(.*) http://localhost:8888/$1 - как то так.
Читал что через апач лучше не проксировать, да и это понятно.
сокет.ио - надо будет глянуть.
Главное кроссбраузерность.

Я люблю то, что делаю и делаю то, что люблю.

5

Re: Node.js

Dark, спасибо за подборочку материалов.
Обязательно гляну на http://socketo.me/  кажется интересным вариантом.

Я люблю то, что делаю и делаю то, что люблю.

6

Re: Node.js

Еще одна неплохая статья на тему: http://habrahabr.ru/company/cackle/blog/167895/

7

Re: Node.js

Я тогда ещё одну на тему подкину

http://habrahabr.ru/post/139339/

Не совсем то, но может какие идеи пригодятся

8

Re: Node.js

Самый простой вариант - повесить Ноду на другой порт и выполнять запросы с клиента туда.

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

Я люблю то, что делаю и делаю то, что люблю.

9

Re: Node.js

Спасибо парни! Куча материалов для изучения и ознокомления. Кстати слышал что у nginx есть проблемы при работе с node.js?
Инфа устаревшая наверно...

Я люблю то, что делаю и делаю то, что люблю.

10

Re: Node.js

IgorN пишет:

А что ты имеешь ввиду? Нода и так висит на своем порте и апач делает проксирование.

Я имею ввиду, что опач не нужен, вообще. Не для него это задача - проксировать пачку постоянных соединений.
Фраза актуальна как в связке с сокет.ио, так и любым другим вариантом реализации WebSocket сервера.

IgorN пишет:

у nginx есть проблемы при работе с node.js

Видимо инфа устаревшая, да. В частности, в статье по моей последней ссылке - как раз Нгинкс и разруливает. default/smile

11

Re: Node.js

Да посмотрел через nginx. Но нода + сокет.ио кажись лучше.
Согласен с первым коментом из твоей статьи

А в сторону NodeJS & Socket.IO не смотрели? Там все намного проще, как по мне. Мы используем, а в качестве хранения данных и обработки каналов Redis с его pub/sub. Скрипт на ноде получился простейший, а на клиенте так вообще 2 строки — обычная подписка на событие, которое прозрачно проксируется на сервер с помощью Socket.IO

Апач у нас пока будет, так как не совсем я рулю проектом. Один из разрабов который его ведет хочет юзать Symfony\Component\Routing\Matcher\ApacheUrlMatcher. Спорить пока смысла с ним нет.
Я на партайм на проекте, но когда возникнут траблы с нагрузками(если возникнут) то переведу на nginx + php-fpm и будет все ок default/smile.
Тдею понял. Посмотрю еще вариант с http://socketo.me/  и заюзаю его или сокет.ио + ноде. Пока склоняюсь ко второму варианту, так как к пхп нет такого доверия ))

Я люблю то, что делаю и делаю то, что люблю.