2015-07-10 11 views
0

Существует два метода реализации кометы. Один использует потоковое HTTP-соединение, которое использует одно постоянное TCP-соединение для отправки и приема нескольких HTTP-запросов/ответов между клиентом/сервером. Второй - длительный опрос HTTP, который поддерживает соединение открытым сервером и, как только происходит событие , ответ завершается, и соединение закрывается. Затем новое соединение с длинным опросом снова открывается клиентом, ожидая прибытия новых событий.Использует ли CometD (Comet with Bayeux Protocol) потоковое HTTP-сообщение или длительный опрос HTTP?

Я использую жемчужину Faye ruby, и я заметил, что он использует Comet/Bayeux из коробки. Но я не могу узнать, какой тип кометы он использует. Я только что собираю, что протокол Bayeux публикует подписку. Мне любопытно узнать, испытывают ли они те же недостатки потоковой передачи HTTP и длительный опрос. Обеспечивает ли это полнодуплексную связь (связь в обоих направлениях и, в отличие от полудуплексного режима, позволяет это одновременно).

ответ

0

Неверное определение потоковой передачи HTTP и длинного опроса.

В потоковом потоке HTTP клиент отправляет запрос на сервер, а сервер отвечает «бесконечным» ответом, который содержит небольшие фрагменты данных (сообщений), как правило, с использованием кодированной передачи передачи. Этот механизм был стандартизован как EventSource (a.k.a Server-Sent Events). Это только отклика на события от сервера к клиенту. Чтобы клиент мог отправить другое сообщение серверу, он должен открыть новое соединение.

В HTTP-запросе клиент отправляет запрос, который хранится сервером до тех пор, пока не произойдет событие (или тайм-аут), тогда ответ будет выполнен, но соединение будет не закрыто. Соединение остается открытым, и на это соединение могут быть отправлены другие запросы, как обычные, так и длинные запросы (по одному, конечно).

Bayeux protocol - протокол приложения поверх транспортного протокола, такого как HTTP или WebSocket.

HTTP - это полнодуплексный протокол в контексте единого обмена сообщениями/ответами. Несколько HTTP-обменов сериализуются (то есть выполняются один за другим). HTTP-запрос/ответ обмен является единицей сериализации.

WebSocket является полнодуплексным протоколом в контексте сообщений WebSocket. Сообщения WebSocket могут отправляться и приниматься одновременно. Сообщение WebSocket является единицей сериализации.

Байе наследует характеристики транспортного протокола, он ведется. Сам протокол Bayeux сам по себе не имеет характеристик «дуплексности», вы можете думать об этом как способ форматирования сообщений в определенной текстовой форме.

Оба CometD и Faye используют Bayeux как для WebSocket, так и для HTTP-опроса.

+0

Каким образом комета не приводит к сбою HTTP-сервера, такого как apache2, с таким количеством открытых подключений tcp, потребляющих память. Я имею в виду, если у вас 64 000 открытых подключений tcp, каждый из 1mb, это 64 ГБ памяти в одиночку, что приведет к сбою большинства серверов. – Donato

+0

Одно соединение tcp не потребляет 1 мегабайт памяти. Это поток, связанный с этим соединением, который потребляет этот MiB. Вот почему apache2 не подходит серверу для долгого опроса. Другие серверы, такие как [Jetty] (http://eclipse.org/jetty) (который поддерживает [CometD] (http://cometd.org)), nginx и т. Д., Могут поддерживать десятки тысяч соединений без потребления так как они используют асинхронный ввод-вывод и поток более эффективным способом для этого случая.Я смог подключить 400 000 клиентов CometD к одному серверу CometD/Jetty, прежде чем использовать ограничения памяти. – sbordet

+0

Спасибо за замечательный отзыв. Я использовал apache2, но после прочтения ваших комментариев nginx это так. – Donato

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

  • Нет связанных вопросов^_^