Как происходит передача события в вебсокет канал с сервер?
Здравствуйте. Хочу написать своё первое серверное приложение на вебсокетах. Выбор пал на Ratchet php. Но у меня есть ряд непонятных моментов.
1) Пользователь на сайте (клиент) подключился к каналу, как я могу ему передать событие которое произошло на сервере? В моём случае это заполнили форму на сайте и отправили POST запрос на сервер (где на порту висит сокет). Как я это событие что пришло письмо могу отправить клиенту в "эфир" канала. Не совсем понятно, может есть примеры?
2) обратное первому, клиент совершает событие на сайте (кнопку нажал или др.) я отправляю это по вебсокету на сервер. Как мне от этого события на сервере вызвать определённый скрипт, который например делает какие то вычисления и др.
Т.е. демон живёт и слушает порт, но как от событий в канале вызывать определённые скрипты. Спасибо за ответы, примеров я так и не нашёл.
1. Поскольку я сомневаюсь что вы написали свое приложение на reactphp (ну то есть это не то же приложение что сокеты слушает), то вам нужно будет организовать общение этих процессов. Тут подойдет какая-нибудь штука вроде zeromq.
В этом случае мы можем по какому-то событию в одном процессе, формировать сообщение и кидать его через pub/sub другому процессу. Другой процесс принимает сообщение и делает то что нужно, то есть находит нужного пользователя в массиве и кидает ему событие.
2. тут зависит от того, хотите ли вы сразу обработать что-то или хотите что бы это что-то происходило изолированно в другом процессе (предпочтительно с точки зрения надежности и стабильности). В первом варианте вам нужно что-то вроде роутера. Во втором - обратное первому.
p.s. Я не рекомендую вам связываться с websockets на php, проще развернуть примитивный сервер на socket-io и через тот же zeromq передавать нужные сообщения между node и php. Проблем меньше будет как для клиента (socket-io намного проще с точки зрения клиента) так и сервера (socket-io намного более надежное решение).
Спасибо. Сейчас ситуация такая что у меня vps и я по сути могу и nodejs туда приплести, но php мне нужен, т.к. вся логика написана уже, надо сделать только канал общения. Поэтому я так и выбрал php, но неужели настолько противопоказано делать сокеты на php, хотя вроде на ratchet жалоб особо нет?
Octoberfest: логику у вас и останется на php, я же не говорю что вам переписывать что-то придется. Схема та же - есть штука работающая с сокетами (nodejs), есть штука делающая работу (на php). Общаются они через zeromq например. То же что и ratchet + ваше приложение.
Сергей Протько: других альтернатив zeromq не знаете? Очень глупо МБ, но что если стучать гетом из скрипта с сокетом на другой скрипт серва но как тогда со вторым быть... События случаются не очень часто, но надо быстро их доставить