Онлайн чат - опрос Ajax или обратный Ajax - PullRequest
3 голосов
/ 01 июля 2010

после целого дня поисков, я хотел бы поговорить о лучшем решении для онлайн-чата.

Это то, что я знаю:

Опрос Ajax - старый, потребляющий пропускную способность,и не масштабируемый способ сделать это.Он делает запрос новых данных на сервер каждые X секунд.Это подразумевает один запрос к базе данных каждые X секунд * number_of_connected_users.

Обратный Ajax, и для одного из его приложений (комет) требуется настраиваемый веб-сервер или выделенный сервер комет, который может обрабатывать количество долгосрочных http-соединений number_of_connected_users.

Мой настоящий сервер: 1 процессор Xeon, 1 ГБ оперативной памяти и 1 Гбит / с пропускной способности.Сервер - это виртуальная машина (следовательно, хорошо масштабируемая).

Мне нужно решение, которое может масштабироваться вместе с сервером и будущей растущей базой пользователей.

Мои сомнения:

  • Насколько метод опроса ajax может повлиять на мое использование полосы пропускания?

  • Каким образом я могу оптимизировать опрос ajax для выполнения запроса БД только при необходимости?

  • Можно ли запустить комет-сервер на той же машине веб-сервера (Apache)?

  • При кометном способе мне все еще нужноинтервал для выполнения запросов к базе данных, а затем для отправки ответа, так где же в режиме реального времени?

  • Может ли комета работать на моем реальном сервере?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 июля 2010

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

Метод опроса ajax также генерирует больше ненужных запросов.При опросе вы используете память и процессор.Комета (если все сделано правильно) использует только память.

Комет-сервер, вероятно, не может работать под Apache.Apache, похоже, не предназначен для длительных запросов.Я бы порекомендовал реализовать ваш комет-сервер в ruby ​​(используя EventMachine) , например , в Python (используя Twisted) или в C.

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

0 голосов
/ 01 июля 2010

Я пишу свой веб-сайт на PHP.

Итак, мне нужно запустить сервер (например, витой) и написать приложение чата на python?Это приложение должно позаботиться о входящем ajax-запросе и доставить новые данные клиентам.

Если я правильно понимаю, для этого подхода не нужна база данных, верно?

...