COMET-приложение имеет другой режим функционирования, принципиально отличающийся от обычной генерации страницы.
Принять запрос (посетитель подключился к чату)
Ждать, пока появится сообщение
Получив сообщение, сгенерировать на его основе ответ
Выдать ответ
(Зависит от реализации) Закрыть соединение
Как правило, большую часть времени соединение висит в ожидании события. При этом выделенный процесс или даже поток на такое соединение - колоссальный перерасход ресурсов, прежде всего - памяти.
Одновременно подключенные к серверу 100 человек при классическом подходе дали бы 100 процессов(или потоков), большая часть которых будет висеть и ждать сообщения. Это достаточно большие затраты памяти, да и процессорное время тоже тратится, хотя и не в такой степени.
Проблема становится очевиднее при цифрах в 1000, 10.000 соединений, которые вполне достижимы в проектах, рассчитанных на большое количество одновременных пользователей: чаты, онлайн-игры, сайты знакомств и др.
Существует много COMET-серверов, но все они основаны на всего нескольких паттернах преодоления этой проблемы.
|