Я являюсь автором встроенного в C ++ HTTP-сервера, совместимого с goog.netBrowserChannel. Вы можете найти документы, которые я написал во время изучения протокола, здесь:
http://code.google.com/p/libevent-browserchannel-server/wiki/BrowserChannelProtocol
Короче говоря, BrowserChannel использует фреймы навсегда в IE и потоковую передачу XHR во всех других браузерах. Протокол разделен на несколько этапов, первым из которых является тестирование сети:
1) протестировать сеть, чтобы убедиться в том, что поддерживается потоковая передача ответа (другими словами, не существует буферизующего прокси)
2) проверить доступ к различным сетевым префиксам (чтобы убедиться, что администратор сети не заблокировал доступ к чату)
Тогда может начаться фактическая передача данных. Данные делятся на два канала (прямой и обратный). Обратный канал представляет собой серию долгоживущих (около 4 минут каждый) запросов, используемых сервером для «потоковой передачи» контента клиенту. Для этого используется HTTP-кодирование. Клиент делает все возможное, чтобы один обратный канал всегда был открыт. Сервер будет закрывать его примерно каждые 4 минуты, после чего клиент откроет новый обратный канал. Прямой канал используется для отправки данных с клиента на сервер. Это подталкивание данных выполняется по мере необходимости.