PHP & Angular 2 - прямой обмен сообщениями с собственным API и базой данных - PullRequest
0 голосов
/ 08 июня 2018

Я "много" исследовал приложения для живого чата и еще много чего, но я не смог найти недостающую часть или направление, в котором мне следует идти.

Что я ' Частная система прямого обмена сообщениями между двумя пользователями без отправки запросов на выборку через фиксированные интервалы.

Что у нас уже есть. Полный PHP Rest API с MySQLдля всего нашего приложения, включая пользователей, сообщения, сообщения, профили, ... и все клиентское приложение Angular 5.

Текущая система обмена сообщениями работает на базовых POST для отправки сообщений и GET для получения новых сообщений (каждый30 секунд) (тогда никогда не было предназначения для приложения чата в реальном времени)

С точки зрения базы данных и API, между двумя идентификаторами UserID есть «диалоги», и каждый диалог содержит сообщения с идентификатором UserID-from.

Найдены предложения:

  • Сокеты (через Socket.io или что-то в этом роде): «проблема» в том, что мы находимся вхотя бык концу лета около 10 тысяч пользователей.Сокеты, вероятно, разрушат наш сервер или, по крайней мере, наш PHP API, если будет более 500 открытых сокетов, или я ошибаюсь?(наша текущая ситуация с GET, вероятно, также ..)

  • Firebase: Но у него есть своя отдельная база данных и все такое, и мы не уверены, как объединить это с нашим существующим API и аутентификацией итакие.

  • 100 + темы и ситуации, которые похожи на "чат-приложение", а не на прямой обмен сообщениями между двумя зарегистрированными пользователями.

У меня также была идея создать отдельный микро-сервис для части обмена сообщениями, основанный на сервере NodeJS Express, но, опять же, клиентам потребуется открытый сокет для этого сервера, а не просто «сокет», априватный канал только для этих двух пользователей?(И тогда мне пришлось бы использовать некоторые грязные части nodejs-mysql для идентификаторов пользователей и аутентификации вместо запуска всего, например, в Mongo)

На данный момент ... Я не уверен, в каком направлениизайдите и как реализовать это без необходимости «передавать» наши данные обмена сообщениями стороннему серверу, например, Firebase, или тратить драгоценное время, пытаясь использовать 4-5 различных методов.

Я знаю, что, вероятно,Я должен переписать всю нашу часть обмена сообщениями на стороне клиента, но это меньше всего меня беспокоит.

В каком направлении мне идти и с какими мыслями?Может быть, кто-то в той же ситуации, что и для преобразования существующего приложения datababse-разговор-users-stuffs?

1 Ответ

0 голосов
/ 16 июля 2018

Просто в качестве обновления.Я реализовал всю Socket-часть, и она работает отлично!

В настоящее время у меня работает Socket-сервер NodeJS (WebSocket), к которому клиенты подключаются при запуске.

PHP API отправляетcURL POST запрос к этому серверу сокетов с clientId и полезной нагрузкой (разные типы, разные тела, ..).Сокет-сервер проверяет, подключен ли этот клиент (через массив поиска ID-соединения) и пересылает это сообщение этому клиенту.Затем клиент обрабатывает тип входящего сообщения, чтобы проверить, какое действие выполнить с полезной нагрузкой.

Никаких проблем или замечаний со стороны производительности.Просто некоторые проблемы с пользователями IE, у которых есть проблемы с подключением к серверу сокетов.

В настоящее время используется для уведомлений в реальном времени, сообщений чата, обновлений пост-каналов, ..

...