Это самый эффективный способ общаться в чате?

Итак, я использую php, mysql и jquery для создания группового живого чата. Вот что я сделал:

  1. Пользователь получает новые сообщения каждую секунду.
  2. Я возвращаю кешированный файл через jquery. Если кешированного файла нет, я извлекаю сообщения из mysql, кэширую его и показываю этот файл пользователю.
  3. Если участник отправляет сообщение, кешированный файл удаляется.

Что я могу сделать, чтобы сделать его более эффективным? Я считаю, что это лучшее решение, не так ли?


person good_evening    schedule 09.03.2011    source источник
comment
Я аплодирую проекту, но зачем изобретать протокол чата? Jabber / XMPP находится в свободном доступе.   -  person OMG Ponies    schedule 09.03.2011
comment
Возможно, каждая секунда - это слишком много ...   -  person Shoe    schedule 09.03.2011
comment
Опрос каждые 55-60 секунд с кометой.   -  person ide    schedule 09.03.2011
comment
Используйте метод извлечения COMET, а не извлечение с сервера по запросу; таким образом браузер получает сообщения только тогда, когда есть сообщения, которые нужно получить, вместо того, чтобы каждую секунду забивать сервер, чтобы обнаружить, что ему нечего получать   -  person Mark Baker    schedule 09.03.2011
comment
@ Чарли Пигарелли: Почему? Он ест полосу пропускания или как?   -  person good_evening    schedule 09.03.2011
comment
@Mark Baker, при отправке данных с сервера требуется больше ресурсов, ›swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/   -  person RobertPitt    schedule 09.03.2011
comment
@Robert - Я знаю, что такие методы, как скрытый iframe, могут потребовать больше ресурсов, я не уверен в BOSH для XMPP, новом HTML 5 WebSocket API или Bayeaux ... но я обязательно прочитаю эту статью.   -  person Mark Baker    schedule 09.03.2011
comment
HTML5 WebSockets довольно приличный, ему просто не хватает поддержки ATM!   -  person RobertPitt    schedule 09.03.2011
comment
@Robert - В ближайшие три месяца я буду рассматривать плюсы и минусы различных технологий, которые подпадают под знамя COMET, в рамках моей новой роли, поэтому перечисленная вами статья будет, безусловно, интересна (жаль вас не получайте никаких баллов за комментарии, за которые проголосовали). Я смотрю на динамические обновления футбольных результатов (по мере их появления)   -  person Mark Baker    schedule 10.03.2011


Ответы (2)


вам следует попробовать Node.js; Это очень эффективный способ реализовать такой чат-проект.

см, например, эту демонстрацию чата.

Node.js - это мощный фреймворк для веб-приложений в реальном времени. Приложение на стороне сервера написано на Javascript, поэтому вы можете предусмотреть возможность совместного использования кода между клиентом и сервером (вы можете делиться классами, делиться шаблонами ...)

person Jerome WAGNER    schedule 09.03.2011
comment
node.JS является серверным, он не взаимодействует с клиентской стороной, как бы то ни было (кроме стандартных веб-протоколов), он выполняет ту же работу, что и php, только архитектура цикла, вы должны правильно понять свои факты, его реальная- время на сервере, но не на клиенте! - person RobertPitt; 09.03.2011
comment
да, вы правы, я должен перефразировать свой ответ. Я имел в виду, что вы можете представить разделение кода javascript между клиентом и сервером. - person Jerome WAGNER; 09.03.2011

ОБНОВЛЕНИЕ: очень похожий вопрос об эффективности полосы пропускания при опросе чата Ajax

Вместо каждой секунды увеличивайте задержку, если сообщений нет, поэтому, если сообщение не получено в течение 1 секунды, выполните следующий запрос через 5 секунд, если сообщение не получено, выполните следующее через 15 секунд и т. Д. пока вы не получите сообщение.

Возможно, вы захотите проверить периодическое обновление jQuery, которое делает то и другое другие варианты.

person amosrivera    schedule 09.03.2011
comment
используется ли для получения этой информации пропускная способность хостинга или пространство? - person good_evening; 09.03.2011
comment
да, но цена минимальна. Также вы можете проверить это: stackoverflow.com/ questions / 1577469 / - person amosrivera; 09.03.2011