angularjs — определите, является ли пользователь онлайн, в противном случае закройте чат (php)

Я делаю сайт, который будет иметь разные чаты. Любой пользователь может создать чат в любое время, а другой пользователь может присоединиться к чат-комнате, когда она будет доступна. Максимум два пользователя могут общаться в одном чате одновременно, но могут существовать несколько комнат.

Я использую AngularJS и PHP с API PubNub для функциональности чата. Созданный чат будет храниться в базе данных MySQL со следующими полями:

  • Пользователь1: пользователь, создавший чат. Это может измениться или быть null если уйдет.
  • User2: это будет null на первом месте и будет храниться имя пользователя человека, который присоединяется к чату.
  • Закрыто: когда оба пользователя находятся в автономном режиме, это будет true (1), тогда никто больше не сможет присоединиться.

Я должен обновить столбцы «user1» или «user2», когда любой из пользователей покидает чат. Затем проверьте, не подключены ли оба пользователя, а затем обновите закрытое значение.

Я знаю, что могу сохранить последнее подключение пользователя, например, вызывая функцию PHP через AJAX каждые 60 секунд. Даже я мог проверить, находится ли другой пользователь в сети, проверив его последнее соединение в той же функции, но кто будет вызывать функцию, чтобы проверить, ушел ли последний пользователь?

Интересно, нужно ли мне проводить такую ​​проверку каждый раз, когда какие-либо пользователи запрашивают доступные списки чатов, или мне приходится решать их другим способом.

Я предполагаю, что я могу установить функцию тайм-аута в PHP каждый раз, когда пользователь присоединяется к чат-комнате. Эта функция будет обновлять столбец пользователя до null и обновить закрытое значение, если оба null, Когда пользователь находится в чате, каждые 60 секунд будет вызываться другая функция, чтобы отложить первую. Но я не знаю, возможно ли это, и возможно ли это с помощью виртуального хостинга.

Я надеюсь, что вы можете помочь мне, и большое спасибо за ваше внимание.

-1

Решение

Ответ таков: не проводите опрос на предмет присутствия, вместо этого пусть ваш сервер прослушивает изменения в присутствии канала, используя PubNub Presence Web Hooks. Пожалуйста, внимательно прочитайте эту статью, так как она подробно описывает все аспекты веб-хуков PubNub Presence, а затем просмотрите официальная документация для веб-хабов PubNub Presence. Примером кода для реализации конечной точки REST на вашем сервере для получения веб-хуков является Node, но вы можете использовать этот код для реализации этого в PHP, если требуется, но если вы можете использовать Node для этой цели, это может быть лучшим выбором (и вы мог бы все еще использовать PHP для всего остального).

Я знаю, что ваш сервер имеет процесс создания чата который вставляет новую запись чата в вашу базу данных, поэтому вам не нужно знать, когда канал станет активным, но когда user1 подписывается на канал чата, PubNub отправит активный канал событие через веб-хук на ваш сервер, если вам нужно знать, когда это произойдет.

когда user2 подписывается на user1Чата, PubNub отправит присоединиться событие на ваш сервер через веб-хук, и ваш сервер может использовать это событие для обновления вашей базы данных с user2информация.

Одновременно, user1 а также user2 подпишется на канал чата и будет следить за присутствием (а не опрашивать hereNow) и получить присоединиться события, а также. Когда любой пользователь листья в чат-комнату (отписывается от канала) PubNub отправит Покидать событие через веб-хук на ваш сервер и напрямую к пользователю, который все еще подписан.

Когда-то последний пользователь листья в чат-комнату PubNub отправит канал неактивен событие на ваш сервер, и ваш сервер может вызвать его чат закрыт процесс обновления базы данных по мере необходимости.

Это дизайн довольно высокого уровня, и есть некоторые другие детали, которые следует учитывать, но сообщение здесь не делайте Опрос PubNub на наличие информации. Использовать только hereNow чтобы узнать текущее состояние присутствия канала и прослушивать дальнейшие события присутствия с этого момента, либо через веб-хуки на ваш сервер, либо через присутствие / подписку на ваши клиентские приложения. В реализации вы фактически подписываетесь на присутствие (прослушивает события присутствия), а затем вызываете hereNow,

Для более подробного обсуждения ваших требований в отношении PubNub я бы порекомендовал обратиться Поддержка PubNub чтобы связаться с менеджером по работе с клиентами и архитектором решений.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]