Нажатие на один источник: как отправлять 5 КБ каждые 5 минут на 50000 клиентов - PullRequest
2 голосов
/ 11 апреля 2011

Мне нужно реализовать архитектуру клиент-сервер, куда сервер отправляет одно и то же сообщение для многих клиентов через Интернет. Мне нужно отправлять одно сообщение каждые 5 минут. Сообщение не будет превышать 5 КБ. Мне нужно решение для масштабирования к большому количеству подключенных клиентов (50.000-100.000)

Я рассмотрел кучу решений:

  • TCP-сокеты

  • UDP Multicast

  • WCF http дуплексная служба (комета)

Я думаю, что мне нужно отказаться от решения UDP, потому что это хорошее решение только для клиентов в одной сети, и оно не будет работать через Интернет. Я где-то читал, что многоадресная рассылка WCF вызовет узкое место, если у меня подключено много клиентов, но я нигде не могу найти документацию, показывающую статистику производительности. Tcp сокеты кажутся мне решением для выбора. О чем вы думаете? Я прав?


Я определенно ошибаюсь, когда говорю, что UDP не работает в интернете ... Я подумал это потому, что я прочитал несколько статей, указывающих, что вам нужно правильно настроил маршрутизаторы в сети для поддержки многоадресной рассылки ... Я читал диапазон многоадресной рассылки портов udp и думал, что это должно быть локально. Вместо этого диапазон 224.0.0.1 - 239.255.255.255 (группа адресов класса D) может быть достигнут через Интернет


Учитывая, что в моем случае надежность не имеет решающего значения, многоадресная рассылка udp является хорошим выбором. .NET Framework предлагает действительно полезные классы для достижения этой цели. Я могу легко запустить UdpClient и начать отправлять данные по многоадресному адресу с двумя строками кода. На стороне клиента это действительно легко. Есть класс UdpSingleSourceMulticastClient, который делает именно то, что мне нужно. Для обеспечения надежности и безопасности .net Framework имеет простой и удобный способ обработки DoS-атак, DNS-повторных привязок и туннельных атак Revers, описанный здесь: http://msdn.microsoft.com/en-us/library/ee707325(v=vs.95).aspx

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Основной вопрос: вас волнует, что обновления попадут к клиентам?

Если вы ДЕЛАЕТЕ, вам нужно будет что-то построить поверх UDP, чтобы повысить надежность.UDP-дейтаграммы НЕ являются надежными, поэтому следует ожидать, что некоторые из них не дойдут до места назначения.Это более вероятно, если вы быстро выталкиваете дейтаграммы UDP.Обратите внимание, что ваши клиенты могут также получить несколько копий одной и той же дейтаграммы в некоторых ситуациях с UDP.

50-100k соединений с таким уровнем трафика не должно быть таким трудным для достижения с TCP, если у вас приличная архитектура,

См. Здесь для некоторых сообщений в блоге, которые я сделал на эту тему.

А вот пример кода, который касается отправки данных многим клиентам.

0 голосов
/ 11 апреля 2011

Одноадресная передача (сокеты tcp) будет нормально работать для относительно небольшого объема трафика, такого как этот, но при этом придерживайтесь технологии многоадресной передачи, ситуация меняется каждый год.

...