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

Да, такава архитектура е осъществима, но... "ping? pong! " нещо е измислено с причина - да уведоми и двете страни, че другата страна все още е там. Всъщност не можете да разберете дали даден клиент е неактивен, защото няма какво да каже или защото всъщност е прекъснат и чакате изчакване на TCP.

UPD: "стотици хиляди клиенти" е възможно в IRCnet само поради сървърните мрежи. За една машина проблемът C10K все още е проблем.

person naivists    schedule 22.02.2012
comment
Също така бих добавил, че е подозрително, че причината, поради която има мрежи от IRC сървъри, е, че самите IRC сървъри не се мащабират толкова добре. Освен това IRC почти не се използва от някой, ако го сравните с нещо като skype. Така че за съвременните приложения, които се грижат за милиони потребители, съветът да не се свързвате звучи солидно, но ако ще имате най-много 10 клиента наведнъж, няма нищо лошо да поддържате връзката отворена през цялото време. - person Andrew Savinykh; 22.02.2012