Я действительно не вижу, как "Ajax Push" вещь. Я знаю длинные опросы и думаю, что это то же самое.
Недостатком длинных опросов является то, что на вашем сервере может быть открыто много незавершенных запросов. Не сокеты, а актуальные запросы. Идея длительного опроса:
- Клиент отправляет запрос на сервер
- Сервер не отвечает (не завершает запрос)
- Сервер ждет, пока есть что сказать (Клиенту)
- Когда сервер получает новую информацию (от другого клиента или где-то еще), он печатает эту информацию всем ожидающим клиентам (может быть много!) И завершает запрос
- Клиент получает эту информацию и немедленно делает другой запрос (с новой отметкой времени и / или хэшем и т. Д.)
Недостаток: если все 500 клиентов выполняют шаг 1 и ничего больше, на сервере открыто 500 запросов, и он просто ожидает отправки некоторой информации и завершения этих запросов. Большинство серверов не допускают 500 открытых HTTP-запросов ...
Если у вас есть время, вы можете прочитать этот PDF-файл. (Хотя это долго.)
PS. Положительным моментом является то, что ваш сервер получает меньше HTTP-запросов (что означает меньшие издержки HTTP), и эта информация отправляется только тогда, когда есть что отправить (что также означает меньшие накладные расходы).
редактировать
Пример длинного опроса: http://hotblocks.nl/tests/ajax/poller/ с источником http://hotblocks.nl/tests/ajax/poller/callback.php?source
Объяснение
Преимущество: меньше HTTP-издержек, потому что меньше HTTP-запросов. Допустим, количество пользователей является статическим (оно есть) и составляет 500.
При длительном опросе: 500 пользователей делают 1 запрос, а затем ждут ............ и затем что-то меняется, и все 500 запросов завершаются (сервером), а затем "возобновляются" (новый HTTP) запрос) от клиента.
Наверх: меньше запросов (1 на пользователя на новую информацию).
Недостаток: более длинные запросы (очень длинный холостой ход, что означает больше открытых запросов).
Без длительного опроса: 500 пользователей делают запрос, сервер отвечает «ничего нового», поэтому 500 пользователей делают новый запрос спустя 500 мс / 1 с / 5 с, а сервер снова отвечает «ничего нового» и т. Д., И т. Д., Пока сервер не получит актуальные новости, а затем ответ содержит что-то. И даже тогда клиенты сразу делают новый запрос.
Наверх: быстрые короткие запросы к серверу, которые можно быстро завершить.
Недостаток: многие, многие, многие из этих запросов к серверу (и каждый HTTP-запрос => HTTP-заголовки => MUCH издержки).
пример объяснения
Пример очень (слишком) прост:
- Вы (Клиент) делаете запрос на Сервер для получения текущей информации
- Сервер предоставляет вам эту информацию и отметку времени
- Клиент получает информацию, использует ее (показывает сообщение) и делает новый запрос с отметкой времени
- Сервер сравнивает отметку времени клиента с отметкой времени сервера (в данном случае
filemtime
файла)
- Если изменение файла новее, чем отметка времени клиента: напечатать новое содержимое файла
- Клиент получает эту информацию и новую метку времени Сервера
- Шаг 3 снова и т. Д.
Время между шагами 4 и 5 может быть очень большим. В активном чате этого не будет. (Новая информация добавляется постоянно.) В многопользовательской игре это может быть (секунды, а не минуты).