Итак, я реализовал чат. Я начну с схемы, которую я использовал.Альтернативный способ перезагрузки чата через несколько секунд
- У меня есть
room
таблицу, которая в основном сохраняет информацию, касающуюся как комнату числа участников, тема и т.д. и т.п. - У меня есть
users
таблицу, которая хранит данные пользователей. - У меня есть таблица
posts
, в которой хранятся сообщения. У этого есть внешний ключ от Пользователей и из таблиц комнаты. - также, у меня есть один финальный стол, который должен иметь отношение между пользователями и комнатами. Таким образом, у него просто есть roomid и userid от пользователей, которые являются частью комнаты.
Теперь у меня есть три div на странице, один для чатареа, другой, где отображаются люди в Интернете, а затем есть текстовая область для публикации сообщения.
Что я делаю в настоящее время, чтобы иметь функции яваскрипта loadChats()
, теперь этот метод вызывает файл PHP, который просто извлекает всех постов в этой конкретной комнате до сих пор. И то же самое сбрасывается в мой div, т.е. «chatroom». Кроме того, у меня есть loadParticipants()
, которые загружают пользователей каждую секунду.
Я использую jquery.post для этой цели и в конце метода, я делаю setTimeout
в конце функции. Теперь вот мои вопросы
Конечно, я могу сделать это лучше. Какие-либо предложения? Я думал о некоторых.
- На каждом вызове PHP, я получаю всю chathistory и отправить его обратно в браузер, конечно, я могу проверить, если количество сообщений такая же, как на стороне клиента, и если да, то Я не буду отправлять сообщения. Но неужели это будет лучше? Как?
- Кроме того, сделать звонок на серверную сторону каждую секунду кажется слишком чересчур избыточным. Есть ли способ сделать это, как если бы новый чат был добавлен в таблицу
posts
, то этот конкретный чат будет уведомлен и обновлен? то есть вместо того, чтобы постоянно пинговать сервер, чтобы запросить новый запрос, просто спросите его один раз и подождите, если что-то новое или нет. Когда этот запрос будет завершен, он снова запустит сервер для следующего обновления.
одно предложение: вместо того, чтобы загружать все сообщения в комнате, выберите только новые сообщения (например, проверьте, например, идентификатор последнего сообщения) и добавьте их в окно чата. –
Просто добавьте поле флага для каждого сообщения ... которое читается/не .... если чтение установлено равным 1 в противном случае 0 .... затем выберите только сообщения с флагом 1 ... –