Скоро мне придется создавать чат в реальном времени, и мне сложно выбрать технологии/библиотеки для достижения этой цели, особенно в серверной части. У меня уже есть несколько вариантов, но мне нужно выбрать один и придерживаться его. Вот мои ограничения:
Сообщения/каналы будут храниться в базе данных вместе с другими таблицами, необходимыми для проекта (например, таблицы пользователей).
Веб-сайт будет создан на Symfony.
Мобильное приложение будет создано на React Native.
Чат должен быть «легко» реализован/использован в новых проектах с использованием того же стека для веб/мобильных устройств. (в комплекте решение? Или просто хорошо документировано для быстрого копирования/вставки)
Мне нужны некоторые функции, в которых часто могут происходить изменения в реальном времени, например, «индикатор печатает» или для отметки сообщения прочитаны, как только пользователь увидит их в своем интерфейсе (без обновления страницы/экрана)
Технологии реального времени (Mercure/WebSockets/...) должны размещаться самостоятельно и бесплатен для коммерческого использования.
Вот варианты, которые я имею в виду:
< ol>
[*]SSE с Mercure на Symfony + компонент React для чата в веб-части + React Native с использованием SSE с полифилом
[*]Symfony + WebSockets с Ratchet/Swoole / другая PHP-библиотека WebSockets? + Компонент React для чата в веб-части + React Native WebSockets (Socket.io для клиентской стороны?)
[*]Symfony + сервер Node.js (Socket.io / µWebSockets + Nest. js ?) + Компонент React для чата в веб-части + React Native Socket.io
[*]Что-то еще?
В заключение, вот вопросы, которые я задаю себе:
Какой лучший выбор между SSE и WebSockets для этого варианта использования. Я бы сказал, что WebSockets является «более» подходящим, даже если это можно сделать с помощью запроса SSE + POST.
Даже если WebSockets в целом является лучшим выбором, тот факт, что я использование Symfony для серверной части не делает Mercure очевидным выбором? Они продвигают его для этого варианта использования, и есть вероятность, что от него не откажутся в ближайшее время. Но тогда не будет ли я ограничен SSE через WebSockets, когда мне захочется использовать такие функции, как «набирает текст» или что-то еще, что может часто меняться в режиме реального времени? То же самое и с React Native. Я слышал, что полифил SSE — это, по сути, HTTP-опрос под капотом, но, возможно, я ошибаюсь.
Разве Ratchet не умер или не близок к этому? Похоже, у них проблемы с поддержкой проекта, они даже не уверены, что они поддерживают последнюю версию PHP. Если это так, то стоит ли мне использовать Swoole или другую стабильную/поддерживаемую/лучшую PHP-библиотеку для обработки серверной части WebSockets?
Должен ли я просто отказаться от идеи использования сервера WebSockets на PHP? и использовать Socket.io на выделенном сервере Node.js? Если да, то как мне передать данные сообщений в мою Symfony, чтобы их можно было зарегистрировать в базе данных без выполнения HTTP-вызовов и, возможно, потерять интерес к использованию WebSockets через SSE? Возможно, с помощью Redis Pub/Sub (никогда раньше этого не делал, ни Socket.io, ни Redis, но у меня нет проблем с обучением)
Если я выберу WebSockets, особенно если серверная часть больше не находится на моем Symfony, как я могу обрабатывать авторизацию, повторное подключение, сверку состояний или знать, кто на самом деле подписывается (и, следовательно, кто в сети), как это уже делает Mercure?
Это очень много, извините, очень надеюсь, что информации достаточно, заранее спасибо за ответы!
Скоро мне придется создавать чат в реальном времени, и мне сложно выбрать технологии/библиотеки для достижения этой цели, особенно в серверной части. У меня уже есть несколько вариантов, но мне нужно выбрать один и придерживаться его. [b]Вот мои ограничения:[/b] [list][*]Сообщения/каналы будут храниться в базе данных вместе с другими таблицами, необходимыми для проекта (например, таблицы пользователей). [*]Веб-сайт будет создан на Symfony. Мобильное приложение будет создано на React Native. [*]Чат должен быть «легко» реализован/использован в новых проектах с использованием того же стека для веб/мобильных устройств. (в комплекте решение? Или просто хорошо документировано для быстрого копирования/вставки) [*]Мне нужны некоторые функции, в которых часто могут происходить изменения в реальном времени, например, «индикатор печатает» или для отметки сообщения прочитаны, как только пользователь увидит их в своем интерфейсе (без обновления страницы/экрана) [*]Технологии реального времени (Mercure/WebSockets/...) должны размещаться самостоятельно и бесплатен для коммерческого использования. [/list] [b]Вот варианты, которые я имею в виду:[/b] < ol> [*]SSE с Mercure на Symfony + компонент React для чата в веб-части + React Native с использованием SSE с полифилом [*]Symfony + WebSockets с Ratchet/Swoole / другая PHP-библиотека WebSockets? + Компонент React для чата в веб-части + React Native WebSockets (Socket.io для клиентской стороны?) [*]Symfony + сервер Node.js (Socket.io / µWebSockets + Nest. js ?) + Компонент React для чата в веб-части + React Native Socket.io [*]Что-то еще?
[b]В заключение, вот вопросы, которые я задаю себе:[/b] [list] [*]Какой лучший выбор между SSE и WebSockets для этого варианта использования. Я бы сказал, что WebSockets является «более» подходящим, даже если это можно сделать с помощью запроса SSE + POST. [*]Даже если WebSockets в целом является лучшим выбором, тот факт, что я использование Symfony для серверной части не делает Mercure очевидным выбором? Они продвигают его для этого варианта использования, и есть вероятность, что от него не откажутся в ближайшее время. Но тогда не будет ли я ограничен SSE через WebSockets, когда мне захочется использовать такие функции, как «набирает текст» или что-то еще, что может часто меняться в режиме реального времени? То же самое и с React Native. Я слышал, что полифил SSE — это, по сути, HTTP-опрос под капотом, но, возможно, я ошибаюсь. [*]Разве Ratchet не умер или не близок к этому? Похоже, у них проблемы с поддержкой проекта, они даже не уверены, что они поддерживают последнюю версию PHP. Если это так, то стоит ли мне использовать Swoole или другую стабильную/поддерживаемую/лучшую PHP-библиотеку для обработки серверной части WebSockets? [*]Должен ли я просто отказаться от идеи использования сервера WebSockets на PHP? и использовать Socket.io на выделенном сервере Node.js? Если да, то как мне передать данные сообщений в мою Symfony, чтобы их можно было зарегистрировать в базе данных без выполнения HTTP-вызовов и, возможно, потерять интерес к использованию WebSockets через SSE? Возможно, с помощью Redis Pub/Sub (никогда раньше этого не делал, ни Socket.io, ни Redis, но у меня нет проблем с обучением) [*]Если я выберу WebSockets, особенно если серверная часть больше не находится на моем Symfony, как я могу обрабатывать авторизацию, повторное подключение, сверку состояний или знать, кто на самом деле подписывается (и, следовательно, кто в сети), как это уже делает Mercure? [/list] Это очень много, извините, очень надеюсь, что информации достаточно, заранее спасибо за ответы!