Трансляция или публикация / подписка для обновления тысяч пользователей - PullRequest
3 голосов
/ 16 июня 2011

У меня есть клиент-серверное приложение, которое должно поддерживать приложение каждого пользователя в актуальном состоянии с помощью набора информации о состоянии.

Обычно одновременно может быть до 1000 пользователей, но в будущем это число может возрасти до 5000 или более.

Обновления должны предоставляться примерно каждые 10 секунд, чтобы пользователь никогда не устарел смотреть на приложение.

Какое приложение лучше всего подходит (это .Net C #)?

  • Механизм «широковещания», где каждый клиент «слушает» сообщение об обновлении
  • Механизм публикации / подписки, при котором каждый подключенный клиент сообщает серверу отправлять ему сообщение каждые 10 секунд
  • Клиентский запрос - каждые 10 секунд каждый клиент запрашивает текущие данные

Система, которую я унаследовал, использует последний подход - и не масштабируется до необходимой степени.

Спасибо

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

Я бы порекомендовал использовать архитектуру, которая реализует что-то по аналогии с NodeJS, или в .NET-арене, что-то вроде SignalR (есть другие, которые появляются, посмотрите на проект здесь

https://github.com/SignalR

и демоверсия

http://chatapp.apphb.com

0 голосов
/ 16 июня 2011

Сосредоточив внимание на подходе, я рекомендую многоадресную рассылку.При запуске клиент должен зарегистрироваться для многоадресной группы, а затем сервер отправляет пакет в эту многоадресную группу.Таким образом, вы можете уменьшить накладные расходы за счет вещания.Во-вторых, вы можете серьезно подумать о многопоточности в вашем сценарии.Обработка тысяч клиентов с помощью одного потока не может быть мудрым решением

Вы можете сослаться на эту статью Code Project в качестве примера для многоадресной рассылки

0 голосов
/ 16 июня 2011

Взгляните на схему наблюдателя .

Таким образом - только заинтересованные клиенты будут слушать, а издатель не будет "DDoS`ed".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...