Это правда, что «Комета» — это термин для этих технологий, но протокол Байё используется лишь в нескольких реализациях. Техника Comet может использовать любой протокол, какой пожелает; Байё — один из них.
Сказав это, есть два основных различия между решением для асинхронных сервлетов и решением Comet+Bayeux.
Первое отличие состоит в том, что решение Comet+Bayeux не зависит от протокола, по которому передается Байе. В проекте CometD есть подключаемые транспорты как для клиентов, так и для серверов, которые могут передавать Байё. Вы можете передавать его с помощью HTTP, при этом Bayeux является содержимым запроса POST, но вы также можете передавать его с помощью WebSocket, при этом Bayeux является полезной нагрузкой сообщения WebSocket. Если вы используете асинхронные сервлеты, вы не можете использовать WebSocket, который намного эффективнее, чем HTTP.
Второе отличие заключается в том, что асинхронные сервлеты поддерживают только HTTP, а для работы с удаленными клиентами Comet требуется нечто большее.
Например, вы можете захотеть уникально идентифицировать клиентов, чтобы две вкладки для одной и той же страницы приводили к двум разным клиентам. Для этого вам нужно добавить «свойство» в запрос асинхронного сервлета, назовем его sessionId
.
Затем вы хотите иметь возможность аутентифицировать клиента; только аутентифицированные клиенты могут получить sessionId
. Но чтобы различать первые запросы на аутентификацию и другие последующие запросы, уже прошедшие аутентификацию, вам нужно другое свойство, скажем, messageType
.
Затем вы хотите иметь возможность быстро уведомлять об отключении из-за потери сети или других проблем с подключением; поэтому вам нужно придумать решение для сердцебиения, чтобы, если сердце бьется, вы знали, что соединение живо, если оно не бьется, вы знали, что оно мертво, и выполнять действия по спасению.
Далее вам нужны функции отключения. И так далее.
Вы быстро понимаете, что строите еще один протокол поверх HTTP.
На этом этапе лучше повторно использовать существующий протокол, такой как Bayeux, и проверенные решения, такие как CometD (который основан на методах Comet с использованием протокола Bayeux), которые дают вам:
- Клиентские библиотеки Java и JavaScript с простыми, но мощными API
- Библиотека сервера Java для выполнения логики вашего приложения без необходимости обработки низкоуровневых деталей, таких как HTTP или WebSocket, через аннотированные службы.
- Возможность подключения транспорта, как клиента, так и сервера
- Расширяемость протокола Байё
- Ленивые сообщения
- Кластеризация
- Максимальная производительность
- Доказательство будущего: пользователи CometD до появления WebSocket не меняли ни строчки кода, чтобы воспользоваться преимуществами WebSocket — вся магия была реализована в библиотеках
- На основе стандартов
- Разработано и поддерживается экспертами по веб-протоколам
- Расширенная документация
- Я могу продолжить, но суть вы поняли :)
Вы не хотите использовать низкоуровневое решение, которое связывает вас только с HTTP. Вы хотите использовать решение более высокого уровня, которое абстрагирует ваше приложение от используемого метода Comet и от протокола, который транспортирует Байе, чтобы ваше приложение можно было написать один раз и использовать будущие технологические усовершенствования. В качестве примера улучшения технологии CometD хорошо работал задолго до того, как появились асинхронные сервлеты, и теперь с асинхронным сервлетом просто стал более масштабируемым, и поэтому ваше приложение без необходимости изменять ни одну строку в приложении.
Используя решение более высокого уровня, вы можете сосредоточиться на своем приложении, а не на кровавых подробностях того, как правильно написать асинхронный сервлет (и это не так просто, как может показаться).
Ответ на ваш вопрос может быть таким: вы используете Comet+Bayeux, потому что хотите стоять на плече гигантов а>.
person
sbordet
schedule
10.01.2013