2012-08-01 4 views
2

Мой вопрос касается того, как протокол Bayeux позволяет открывать несколько вкладок в одном браузере. Если мы также используем парадигму публикации/подписки, нам нужно отправить запрос на сервер для подписки, тогда откроется ли это соединение? Если открыт, то как это предотвращает ограничение соединения. Если соединение не открывается, то как сервер отправляет данные на несколько вкладок.Протокол Bayeux и способ его поддержки нескольких вкладок, открытых в одном браузере

ответ

0

Ограничение на соединение по стандарту HTTP рекомендуется равным 2, но это только рекомендация. Никакие современные браузеры фактически не налагают ограничение на 2 подключения.

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

http://svn.cometd.com/trunk/bayeux/bayeux.html

РЕКОМЕНДУЕТСЯ, клиентские реализации Байе использовать на стороне клиента, сохранение или куки для обнаружения нескольких intances клиентов Байё, работающих в рамках одного клиента HTTP. После обнаружения пользователю МОЖЕТ предлагаться отключить всех, кроме одного из клиентов. Возможно, для клиентских реализаций можно использовать постоянство на стороне клиента для совместного использования экземпляра клиента Bayeux.

+0

Спасибо Samuel за ваш ответ. Но если один пользователь открывает один и тот же экземпляр на всех вкладках, я хочу получать уведомления в реальном времени на всех открытых вкладках. Вы упомянули, что пользователю может быть предложено отключить всех, кроме одного из клиентов. Тогда в этом случае все вкладки получат уведомления в реальном времени? Возможно ли, если на стороне клиента будет присутствовать экземпляр клиента Bayeux. Есть ли какой-нибудь пример этого сценария? – cherry

+0

Для более общей перспективы вы можете проверить это: http://stackoverflow.com/questions/9554896/sharing-websocket-across-browser-tabs –

+0

@cherry, пример говорит о том редком случае, когда браузер ограничивает каждый сервер двумя одновременными подключениями. Другим вариантом для обмена данными между вкладками является использование Flash. Каждый экземпляр Flash может разговаривать с остальными, которые обслуживались одним и тем же сервером, с помощью «LocalConnection». Это делается полностью на стороне клиента, а не на сервере. Они могут разговаривать с Javascript через 'ExternalInterface', поэтому можно создать общий проект обмена вкладками, используя Flash в качестве промежуточного. –

0

Обновленная спецификация Bayeux находится на http://docs.cometd.org/reference/#bayeux.

Обработка нескольких клиентов из одного браузера обсуждается в справочной системе CometD по адресу http://docs.cometd.org/reference/#java_server_multiple_sessions.

+0

Спасибо за обмен документами. Упоминается, что разрешен только один длинный запрос опроса при открытии нескольких вкладок. Тогда возможно ли, что все вкладки получают уведомления в реальном времени? – cherry

+0

В CometD вы можете настроить количество активных длинных опросов, используя параметр maxConnections на клиенте, и параметр maxSessionsPerBrowser на сервере. Если вы установите их на разумные цифры, например 2 или 3, у вас может быть такое количество вкладок, получающих уведомления «в реальном времени». Дополнительные вкладки обычно проверяются и, следовательно, имеют максимальную задержку, равную multiSessionInterval, по умолчанию 2 секунды. – sbordet