Я делаю сайт, который будет иметь разные чаты. Любой пользователь может создать чат в любое время, а другой пользователь может присоединиться к чату, когда он будет доступен. Максимально два пользователя могут одновременно общаться в одном чате, но могут существовать несколько чатов.Установите, действительно ли в данный момент пользователь онлайн, а в противном случае чат (php)
Я использую AngularJS и PHP с API PubNub для работы в чате. Созданный чат будет храниться в базе данных MySQL со следующими полями:
- User1: пользователь, создавший комнату для обсуждения. Он может измениться или быть
null
, если он уходит. - User2: он будет
null
на первом месте и сохранит имя пользователя, который присоединится к чату. - Закрыто: когда оба пользователя находятся в автономном режиме, это будет правда (1), и никто больше не сможет присоединиться.
Я должен обновить столбцы «user1» или «user2», когда кто-либо из пользователей покинет чат. Затем проверьте, находятся ли оба пользователя в автономном режиме, а затем обновите закрытое значение.
Я знаю, что могу сохранить последнее соединение пользователя, вызвав функцию PHP через AJAX каждые 60 секунд, например. Даже я мог проверить, остается ли другой пользователь в режиме онлайн, проверяя его последнее соединение в той же функции, но кто будет вызывать функцию, чтобы проверить, остался ли последний пользователь?
Интересно, нужно ли мне выполнять эту проверку каждый раз, когда либо пользователи запрашивают доступные чат-листы, либо я должен решить это с помощью другого подхода.
Я предполагаю, что я могу установить функцию тайм-аута в PHP каждый раз, когда пользователь присоединяется/создает чат. Эта функция собирается обновить столбец пользователя до null
и обновить закрытое значение, если оба значения: null
. Когда пользователь находится в чате, каждые 60 секунд будет вызываться другая функция, чтобы отложить первый. Но я не знаю, если это возможно, и если это возможно, используя общий хостинг.
Надеюсь, вы можете мне помочь и поблагодарить вас за внимание.
Если вы не используете веб-порты, единственным сигналом, который у вас есть, является время/дата последнего запроса. Опрос может помочь, но, как вы узнали, это не закроет чат. Я не вижу в этом хорошего решения, кроме запланированной задачи по очистке помещений, в которых нет активных пользователей. –
Согласитесь с Кевином о веб-сайтах ... если ваш сервер не написан на php (а не apache, но сам php прослушивает некоторые порты). Я предлагаю вам использовать что-то вроде node.js для сообщений чата на стороне сервера. – SparK