Ответы пользователя по тегу API
  • Добавить месенджер к rest api?

    werevolff
    @werevolff
    Не знаю, поможет или нет, но я бы начинал поиск с готовых решений:

    Для бэкенда
    Для фронтэнда

    В качестве библиотеки, реализующей вэб-сокеты используется Ratchet

    Полагаю, что для PHP надо будет ещё посношаться с настройкой деплоймента, хотя не факт. Получается, что у нас будет два типа сообщений:

    1. Состояние списка пользователей.
    2. Сообщения пользователей.

    Если бы речь шла об ангуляре, то можно было бы отслеживать фокус на input, либо изменения модели, привязанной к input. Либо, можно было бы усложнить процесс и изучать кол-во изменений модели за единицу времени. Есть ещё возможность отлавливать keypress. В общем, когда мы устанавливаем, что current client печатает, мы отправляем на сервер сообщение одного типа. Если пользователь производит submit - сообщение другого типа.

    Так мы можем использовать Redis / RabbitMQ сервер для сохранения статусов пользователей открытых бесед (и удалять instance, если беседа закрыта). Получается следующая схема:

    В ОЗУ хранится {'dialogIDqweqweqwe': {'users': {'vasya': {'state': 'online', 'activity': 'printing'}, 'petya': {'state': 'online', 'activity': null'}} ]}}
    При изменении статуса от Пети, его клиент отправляет {'action': 'userActivity', 'value':'printing'}. Насколько я понял доку по рэтчету, когда приходит сообщение от одного из клиентов, срабатывает хук onMessage. В нём мы проверяем action ответа и, либо сохраняем данные и делаем $client->send (если что-то изменилось в сравнении с предыдущим состоянием), либо игнорируем изменения.

    Механизм web-сокетов вы понимаете правильно. На бэкенде поднимается server - приложение, которое реализует протокол WebSocket. Общее представление о работе даёт его название. Server представляет собой сокет, к которому подключается N клиентов и слушают изменения (ждут событий).
    Ответ написан
    Комментировать