@Octoberfest

Как происходит передача события в вебсокет канал с сервер?

Здравствуйте. Хочу написать своё первое серверное приложение на вебсокетах. Выбор пал на Ratchet php. Но у меня есть ряд непонятных моментов.
1) Пользователь на сайте (клиент) подключился к каналу, как я могу ему передать событие которое произошло на сервере? В моём случае это заполнили форму на сайте и отправили POST запрос на сервер (где на порту висит сокет). Как я это событие что пришло письмо могу отправить клиенту в "эфир" канала. Не совсем понятно, может есть примеры?

2) обратное первому, клиент совершает событие на сайте (кнопку нажал или др.) я отправляю это по вебсокету на сервер. Как мне от этого события на сервере вызвать определённый скрипт, который например делает какие то вычисления и др.

Т.е. демон живёт и слушает порт, но как от событий в канале вызывать определённые скрипты. Спасибо за ответы, примеров я так и не нашёл.
  • Вопрос задан
  • 457 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1. Поскольку я сомневаюсь что вы написали свое приложение на reactphp (ну то есть это не то же приложение что сокеты слушает), то вам нужно будет организовать общение этих процессов. Тут подойдет какая-нибудь штука вроде zeromq.

В этом случае мы можем по какому-то событию в одном процессе, формировать сообщение и кидать его через pub/sub другому процессу. Другой процесс принимает сообщение и делает то что нужно, то есть находит нужного пользователя в массиве и кидает ему событие.

2. тут зависит от того, хотите ли вы сразу обработать что-то или хотите что бы это что-то происходило изолированно в другом процессе (предпочтительно с точки зрения надежности и стабильности). В первом варианте вам нужно что-то вроде роутера. Во втором - обратное первому.

p.s. Я не рекомендую вам связываться с websockets на php, проще развернуть примитивный сервер на socket-io и через тот же zeromq передавать нужные сообщения между node и php. Проблем меньше будет как для клиента (socket-io намного проще с точки зрения клиента) так и сервера (socket-io намного более надежное решение).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы