Как работает (полнофункциональный) длинный сервер избирательного опроса абстрактно

StackOverflow https://stackoverflow.com/questions/3153959

Вопрос

Поскольку вы используете контур событий в отличие от потоков, как выглядит фактический сервер?

Я знаю, что он использует петлю событий, но как вы отделяете запросы? И как вы помешаете свой сервер бежать чрезвычайно медленно (так как он, я предполагаю, может только толкать одну вещь одновременно с тех пор, как это безтепечно?)

Какой-то псевдокод будет отличным.

Прости мое невежество; Конечно, если есть где-то, что объясняет его в неапосном «это достаточно хорошо, пока вы не получите 1000 посетителей», я был бы рад узнать об этом.

Это было полезно?

Решение

Детали реализации сервера длинного опроса настолько варьируются от платформы на платформу, что ваши предположения могут не быть правильными.

Я реализовал сервер Comet для наш сайт используя .NET. Я использую Httplistener. делать все скучные HTTP материал и Microsoft CCR. иметь дело со всеми async io. Он использует пул резьбы к запросам на обслуживание, как и когда они приходят. Это не нить на клиент, но это не одноистовое резьбовое, как правило, требует нескольких десятков потоков, чтобы оставаться жидким, поскольку количество пользователей. Этот подход означает, что мы масштабируемся на нескольких ядрах CPU. CCRS Async Reumerator Pattern действительно помог сохранить асинхронную логику красивую и аккуратно, и я могу прочитать код справедливо легко год.

Этот подход оказался чрезвычайно масштабируемым. Я тестировал до 20000 клиентов, после чего мы стали связаны сетью IO. Он обрабатывает всех наших клиентов (которые «навсегда» подключены, воссоединяясь каждые 30-е годы), тикают на нагрузке на 1-2% сервера. Он определенно стоит пересмотреть ваше предположение, что вы должны выбрать архитектуру петли события, в отличие от нескольких потоков. Средняя земля очень красиво работает для меня, и .Net Асинхронная модель программирования Для борьбы с IO связанными задачами действительно уводит вас от необходимости на битам Micro-Manage. Эффективно, когда есть данные IO для обработки, нить заимствована из пула, чтобы выполнить эту обработку, и впоследствии возвращается в пул, готовый к обслуживанию другого запроса. Все сложные IOCP вещи абстрагировано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top