Использует ли CometD (Comet with Bayeux Protocol) потоковую передачу HTTP или длинный опрос HTTP?

Существует два способа реализации Comet. Один использует потоковую передачу HTTP, которая использует одно постоянное TCP-соединение для отправки и получения нескольких HTTP-запросов / ответов между клиентом / сервером. Второй - длинный опрос HTTP, который поддерживает соединение открытым сервером и, как только происходит событие., ответ зафиксирован и соединение закрыто. Затем новое соединение с длинным опросом немедленно открывается клиентом, ожидающим прибытия новых событий.

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

1 ответ

Решение

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

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

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

Протокол Bayeux - это прикладной протокол поверх транспортного протокола, такого как HTTP или WebSocket.

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

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

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

И CometD, и Faye используют Bayeux для длинных опросов WebSocket и HTTP.

Другие вопросы по тегам