Я создаю сервер для отслеживания присутствия клиентов в сети на веб-странице.
- Для одновременного мониторинга будет 80-100 000 (восемьдесят тысяч) клиентов.
- Я использую .Net, чтобы написать это.
Клиенты свяжутся с (отдельным) сервером, используя JavaScript (на HTML-странице), чтобы сообщить серверу, что они живы / находятся в сети.
Я рассматриваю один из двух подходов:
Постоянные соединения с keep-alive регулярно отправляются.
Это даст мне гораздо более высокую точность при отключении клиентов, и мне не нужно слишком часто обновлять структуру памяти (onlineinfo), потому что мы знаем, когда клиент приходит и уходит. Дополнительные преимущества для сетевого оборудования / пропускной способности.
Клиенты (повторно) подключаются через интервалы, чтобы сообщить серверу, что они живы.
Это требует много подключений и обязательно снизит точность. Я думаю, что интервалы в 2-3 минуты - это лучшее, что мы можем сделать. 80k / 120 = 660 подключений в секунду ... ASP.Net работает не слишком быстро, поэтому я не уверен в этом. 8-ядерная система = ~ 10 мс на исполнение.
При таком количестве соединений, очевидно, существуют некоторые ограничения. Например, я не могу порождать столько потоков одновременно.
1 запрос к IIS, порождающий приложение ASP.Net, будет использовать 1 поток, пока запрос не будет выполнен.
Является ли лучшим вариантом написать автономный http-сервер?
Разве .Nets TcpListener не использует httpd.sys (IIS)?
Буду признателен за любые (конструктивные) мысли по этому вопросу.
Редактировать: Добавление некоторых полезных ссылок к этому сообщению, найденных по ссылкам из ответа Николаса Репикета: