IRC-протокол - постоянные клиентские соединения в порядке?

Когда я экспериментировал с C# и WCF, я все время читал о том, насколько немасштабируемо иметь клиентов с постоянным текущим подключением к серверу. И хотя WCF допускает, что, по-видимому, рекомендуется использовать «за вызов», а не «за сеанс» для управления экземпляром, если вы хотите иметь какую-либо достойную масштабируемость. (Пожалуйста, поправьте меня, если я ошибаюсь)

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


person Jim_CS    schedule 22.02.2012    source источник
comment
en.wikipedia.org/wiki/C10k_problem   -  person CodesInChaos    schedule 22.02.2012
comment
На самом деле, возможно, более интересным примером в последнее время являются веб-сокеты.   -  person Marc Gravell    schedule 22.02.2012
comment
imho, вы не должны использовать WCF для IRC, а чистые сокеты или структуру сокетов.   -  person jgauffin    schedule 23.02.2012


Ответы (3)


Пока вы не следуете архитектуре «один поток на соединение», сервер может поддерживать довольно большое количество одновременных TCP-соединений.

IRC не требует многого для каждого состояния соединения, кроме окон отправки и получения TCP.

person CodesInChaos    schedule 22.02.2012

Если вам нужна дуплексная связь в режиме реального времени (IRC — это протокол чата), то подходящим вариантом является сохранение активного TCP-соединения. Однако TCP-подключение увеличивает нагрузку на сеть, а операционные системы имеют практические ограничения на количество одновременных открытых TCP-подключений. WCF обычно используется в контексте SOAP/HTTP/RPC, где дуплексная связь не требуется, но, безусловно, он также предлагает подходящие привязки и каналы для этого. Чтобы ответить на ваш вопрос, нет ничего плохого в том, чтобы поддерживать соединение открытым, если у вас есть требования к дуплексной связи в реальном времени для связи.

person Kyberias    schedule 22.02.2012

Да, такая архитектура возможна, но... "пинг?понг! " вещь была придумана не просто так - чтобы обе стороны знали, что другая сторона все еще там. На самом деле вы не можете сказать, простаивает ли клиент, потому что ему нечего сказать или потому что он фактически отключен, и вы ожидаете тайм-аута TCP.

UPD: "сотни тысяч клиентов" возможны в IRCnet только из-за серверных сетей. Для одной машины проблема C10K по-прежнему актуальна.

person naivists    schedule 22.02.2012
comment
Я бы также добавил, что существует подозрение, что причина существования сетей IRC-серверов заключается в том, что сами IRC-серверы плохо масштабируются. Кроме того, IRC почти никто не использует, если сравнивать его с чем-то вроде скайпа. Таким образом, для современных приложений, которые обслуживают миллионы пользователей, совет держать их без подключения звучит солидно, но если вы собираетесь иметь не более 10 клиентов одновременно, нет ничего плохого в том, чтобы постоянно поддерживать подключение открытым. - person Andrew Savinykh; 22.02.2012