Что такое Long-Polling, Websockets, Server-Sent Events (SSE) и Comet?



Я пробовал читать некоторые статьи, но я еще не очень ясно о понятиях.



кто-нибудь хотел бы попробовать объяснить мне, что это за технологии:




  1. Опроса

  2. Сервер-Отправлено Событий

  3. Websockets

  4. Комета


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



теперь, какой из них я должен использовать для приложения в режиме реального времени. Я много слышал о websockets (с socket.io [узел.JS library]) но почему не PHP?

840   3  

3 ответов:

в приведенных ниже примерах клиент-это браузер, а сервер-веб-сервер, на котором размещен веб-сайт.

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

обычный HTTP:

  1. клиент запрашивает страницу с сервера.
  2. сервер вычисляет ответ
  3. сервер отправляет ответ клиенту.

HTTP

Ajax Опрос:

  1. клиент запрашивает веб-страницу с сервера, используя обычный HTTP (см. HTTP выше).
  2. клиент получает запрошенную веб-страницу и выполняет JavaScript на странице, которая запрашивает файл с сервера через регулярные промежутки времени (например, 0,5 секунды).
  3. сервер вычисляет каждый ответ и отправляет его обратно, как и обычный HTTP трафик.

Ajax Polling

Ajax Long-Polling:

  1. клиент запрашивает веб-страницу с сервера, используя обычный HTTP (см. HTTP выше).
  2. клиент получает запрошенную веб-страницу и выполняет JavaScript на странице, которая запрашивает файл с сервера.
  3. сервер не сразу отвечает с запрошенной информацией, но ждет, пока есть новая информация доступный.
  4. когда появляется новая информация, сервер отвечает с новой информацией.
  5. клиент получает новую информацию и сразу же отправляет запрос на другой сервер, заново начать процесс.

Ajax Long-Polling

HTML5 Server Sent Events (SSE) / EventSource:

  1. клиент запрашивает веб-страницу с сервера, используя обычный HTTP (см. HTTP выше).
  2. клиент получает запрошенная веб-страница и выполняет JavaScript на странице, которая открывает соединение с сервером.
  3. сервер отправляет событие клиенту, когда появляется новая информация.

    • трафик в реальном времени от сервера к клиенту, в основном это то, что вам нужно
    • вы хотите использовать сервер, который имеет цикл событий
    • невозможно подключиться к серверу из другого домена
    • если вы хотите подробнее, Я нашел это очень полезным:(статья),(статья),(статья),(учебник).

HTML5 SSE

HTML5 Websockets:

  1. клиент запрашивает веб-страницу с сервера, используя обычный http (см. HTTP выше).
  2. клиент получает запрошенную веб-страницу и выполняет JavaScript на странице, которая открывает соединение с сервер.
  3. теперь сервер и клиент могут отправлять друг другу сообщения при наличии новых данных (с обеих сторон).

    • трафик в реальном времени с сервера на клиент и от клиента к серверу
    • вы хотите использовать сервер, который имеет цикл событий
    • С WebSockets можно подключиться к серверу из другого домена.
    • также можно использовать сторонний хостинг сервер websocket, например толкатель или другие. Таким образом, вам нужно будет только реализовать клиентскую сторону, что очень просто!
    • если вы хотите прочитать больше, я нашел эти очень полезные: (статьи),(статья) (учебник).

HTML5 WebSockets

Комета:

Comet представляет собой набор методов до HTML5, которые используют потоковое и длительный опрос для достижения приложений в реальном времени. Подробнее читайте на Википедия или этой статьи.


теперь, какой из них я должен использовать для приложения в реальном времени (что мне нужно код.) Я много слышал о websockets (с socket.io [a узел.JS library]) но почему не PHP ?

вы можете использовать PHP с WebSockets, проверьте Храповой.

Tieme приложил много усилий к своему превосходному ответу, но я думаю, что суть вопроса OPs заключается в том, как эти технологии относятся к PHP, а не как работает каждая технология.

PHP является наиболее используемым языком в веб-разработке, помимо очевидной клиентской стороны html, css и javascript. Тем не менее PHP имеет 2 основные проблемы, когда речь заходит о приложениях реального времени:

1) PHP начинался как очень простой CGI. PHP продвинулся очень далеко, так как это ранняя стадия, но это произошло маленькими шажками. PHP уже имел много миллионов пользователей к тому времени, когда он стал встроенной и гибкой библиотекой C, что сегодня, большинство из которых зависели от его более ранней модели выполнения, поэтому он еще не сделал твердой попытки избежать модели cgi внутри. Даже интерфейс командной строки вызывает библиотеку PHP (libphp5.so на linux, php5ts.dll на windows и т. д.), Как будто это все еще cgi, обрабатывающий запрос GET/POST. Он по-прежнему выполняет код, как будто он просто должен построить "страницу", а затем конец это жизненный цикл. В результате он имеет очень мало поддержки для многопоточного или событийного программирования (в пользовательском пространстве PHP), что делает его в настоящее время непрактичным для многопользовательских приложений в реальном времени.

обратите внимание, что PHP имеет расширения для предоставления циклов событий (таких как libevent) и потоков (таких как pthreads) в пользовательском пространстве PHP, но очень, очень мало приложений используют их.

2) PHP по-прежнему имеет значительные проблемы со сборкой мусора. Хотя эти вопросы постоянно улучшаются (вероятно, это самый большой шаг, чтобы закончить жизненный цикл, как описано выше), даже лучшие попытки создания длительно работающих приложений PHP требуют перезапуска на регулярной основе. Это также делает его непрактичным для приложений реального времени.

PHP 7 будет отличным шагом, чтобы исправить эти проблемы, а также, и кажется очень перспективным в качестве платформы для приложений в режиме реального времени.

Я попытался сделать заметку об этом и собрал и написал примеры из перспектива java.

HTTP для разработчиков Java

обратный Ajax-старый стиль

асинхронная обработка на стороне сервера

обратный Ajax-новый стиль

Сервер Отправляет События

положить его здесь для любого разработчика java, который ищет та же тема.

Comments

    Ничего не найдено.