2014-02-11 3 views
1

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

  • У меня есть room таблицу, которая в основном сохраняет информацию, касающуюся как комнату числа участников, тема и т.д. и т.п.
  • У меня есть users таблицу, которая хранит данные пользователей.
  • У меня есть таблица posts, в которой хранятся сообщения. У этого есть внешний ключ от Пользователей и из таблиц комнаты.
  • также, у меня есть один финальный стол, который должен иметь отношение между пользователями и комнатами. Таким образом, у него просто есть roomid и userid от пользователей, которые являются частью комнаты.

Теперь у меня есть три div на странице, один для чатареа, другой, где отображаются люди в Интернете, а затем есть текстовая область для публикации сообщения.

Что я делаю в настоящее время, чтобы иметь функции яваскрипта loadChats(), теперь этот метод вызывает файл PHP, который просто извлекает всех постов в этой конкретной комнате до сих пор. И то же самое сбрасывается в мой div, т.е. «chatroom». Кроме того, у меня есть loadParticipants(), которые загружают пользователей каждую секунду.

Я использую jquery.post для этой цели и в конце метода, я делаю setTimeout в конце функции. Теперь вот мои вопросы

Конечно, я могу сделать это лучше. Какие-либо предложения? Я думал о некоторых.

  1. На каждом вызове PHP, я получаю всю chathistory и отправить его обратно в браузер, конечно, я могу проверить, если количество сообщений такая же, как на стороне клиента, и если да, то Я не буду отправлять сообщения. Но неужели это будет лучше? Как?
  2. Кроме того, сделать звонок на серверную сторону каждую секунду кажется слишком чересчур избыточным. Есть ли способ сделать это, как если бы новый чат был добавлен в таблицу posts, то этот конкретный чат будет уведомлен и обновлен? то есть вместо того, чтобы постоянно пинговать сервер, чтобы запросить новый запрос, просто спросите его один раз и подождите, если что-то новое или нет. Когда этот запрос будет завершен, он снова запустит сервер для следующего обновления.
+0

одно предложение: вместо того, чтобы загружать все сообщения в комнате, выберите только новые сообщения (например, проверьте, например, идентификатор последнего сообщения) и добавьте их в окно чата. –

+0

Просто добавьте поле флага для каждого сообщения ... которое читается/не .... если чтение установлено равным 1 в противном случае 0 .... затем выберите только сообщения с флагом 1 ... –

ответ

1

Вы должны заглянуть в websockets (я никогда не использовал их с PHP, но это кажется действительно многообещающим: http://socketo.me/). Что вы можете сделать, так это то, что сервер нажимает любые новые сообщения клиенту всякий раз, когда они входят, и каждый клиент нажимает на сервер и т. Д. Таким образом, вам не придется постоянно пинговать сервер через каждые 2 секунд и загружать тонны данных для сравнения. Когда появляется новое сообщение, сервер сохраняет его в какой-то базе данных и затем передает это сообщение через все открытые сокеты. То же самое происходит при входе/выходе из системы.

Редактировать: Просто просмотрите страницу еще больше, и их учебник даже рассказывает, как настроить его с помощью базовой функциональности chatroom-esque.

Смежные вопросы