Существует два метода реализации кометы. Один использует потоковое HTTP-соединение, которое использует одно постоянное TCP-соединение для отправки и приема нескольких HTTP-запросов/ответов между клиентом/сервером. Второй - длительный опрос HTTP, который поддерживает соединение открытым сервером и, как только происходит событие , ответ завершается, и соединение закрывается. Затем новое соединение с длинным опросом снова открывается клиентом, ожидая прибытия новых событий.Использует ли CometD (Comet with Bayeux Protocol) потоковое HTTP-сообщение или длительный опрос HTTP?
Я использую жемчужину Faye ruby, и я заметил, что он использует Comet/Bayeux из коробки. Но я не могу узнать, какой тип кометы он использует. Я только что собираю, что протокол Bayeux публикует подписку. Мне любопытно узнать, испытывают ли они те же недостатки потоковой передачи HTTP и длительный опрос. Обеспечивает ли это полнодуплексную связь (связь в обоих направлениях и, в отличие от полудуплексного режима, позволяет это одновременно).
Каким образом комета не приводит к сбою HTTP-сервера, такого как apache2, с таким количеством открытых подключений tcp, потребляющих память. Я имею в виду, если у вас 64 000 открытых подключений tcp, каждый из 1mb, это 64 ГБ памяти в одиночку, что приведет к сбою большинства серверов. – Donato
Одно соединение tcp не потребляет 1 мегабайт памяти. Это поток, связанный с этим соединением, который потребляет этот MiB. Вот почему apache2 не подходит серверу для долгого опроса. Другие серверы, такие как [Jetty] (http://eclipse.org/jetty) (который поддерживает [CometD] (http://cometd.org)), nginx и т. Д., Могут поддерживать десятки тысяч соединений без потребления так как они используют асинхронный ввод-вывод и поток более эффективным способом для этого случая.Я смог подключить 400 000 клиентов CometD к одному серверу CometD/Jetty, прежде чем использовать ограничения памяти. – sbordet
Спасибо за замечательный отзыв. Я использовал apache2, но после прочтения ваших комментариев nginx это так. – Donato