Я делаю сайт, который будет иметь разные чаты. Любой пользователь может создать чат в любое время, а другой пользователь может присоединиться к чат-комнате, когда она будет доступна. Максимум два пользователя могут общаться в одном чате одновременно, но могут существовать несколько комнат.
Я использую AngularJS и PHP с API PubNub для функциональности чата. Созданный чат будет храниться в базе данных MySQL со следующими полями:
null
если уйдет.null
на первом месте и будет храниться имя пользователя человека, который присоединяется к чату.Я должен обновить столбцы «user1» или «user2», когда любой из пользователей покидает чат. Затем проверьте, не подключены ли оба пользователя, а затем обновите закрытое значение.
Я знаю, что могу сохранить последнее подключение пользователя, например, вызывая функцию PHP через AJAX каждые 60 секунд. Даже я мог проверить, находится ли другой пользователь в сети, проверив его последнее соединение в той же функции, но кто будет вызывать функцию, чтобы проверить, ушел ли последний пользователь?
Интересно, нужно ли мне проводить такую проверку каждый раз, когда какие-либо пользователи запрашивают доступные списки чатов, или мне приходится решать их другим способом.
Я предполагаю, что я могу установить функцию тайм-аута в PHP каждый раз, когда пользователь присоединяется к чат-комнате. Эта функция будет обновлять столбец пользователя до null
и обновить закрытое значение, если оба null
, Когда пользователь находится в чате, каждые 60 секунд будет вызываться другая функция, чтобы отложить первую. Но я не знаю, возможно ли это, и возможно ли это с помощью виртуального хостинга.
Я надеюсь, что вы можете помочь мне, и большое спасибо за ваше внимание.
Ответ таков: не проводите опрос на предмет присутствия, вместо этого пусть ваш сервер прослушивает изменения в присутствии канала, используя 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 чтобы связаться с менеджером по работе с клиентами и архитектором решений.
Других решений пока нет …