Zdar lidi, makam na jedne sitove aplikaci a momentalne resim jeji serverovou cast. Hlavnim ucelem serveru je posilat data klientum a zaroven s nima komunikovat. A tady bych chtel vedet vase nazory popripade navrhy na zmeny.
Aplikace je delana v C# + .NET 3.5 pres tridu Socket. V nynejsim stavu to mam tak, ze mam kolekci socketu (klientu) na ktere posilam data (v jednom vlakne stridanim socketu) a smyčku, ve ktere bych mel asynchronne komunikovat s klienty (pro kazdeho je udelano vlakno).
Tento koncept se mi moc nelibi z duvodu zatizeni procesoru prilis vlakny pri vetsim poctu klientu a tady mi tedy nastava otazka, jak to sikovne vymyslet?
Posledni napad, ktery se mi zda celkem realny je tento:
Mit 2 kolekce socketu s klienty, kde by jedna posilala data na urcitem portu a druhou, ktera by provadela komunikaci s klientem na jinem. A cele by to mohlo bezet treba ve 2 vlaknech, akorat by se v kazde smycce stridaly sockety stejne jako predtim u posilani dat.
BTW: Pro posilani dat nepouzivam svuj protokol, ale pro komunikaci uz ano.
Tak co myslite? Je to realne reseni? Pouziva se to vubec? Nebo se to resi nejak jinak?
Fórum › .NET
Sitova aplikace - nazor + navrhy
jeste taky muzes po pripojeni klienta udelat fork procesu a predat mu ten socket.. akorat to neni zrovna vhodne pokud maji komunikovat i mezi sebou a je to daleko narocnejsi na pamet protoze se celej program zduplikuje :)
thready sou nej reseni .. pokud muze jeden klient nejakym narocnejsim pozadavkem zablokovat zbytek
Tohle se obvykle řeší dvěma způsoby. Buď jako boahttp://en.wikipedia.org/wiki/Boa_(web_server), tedy že ve smyčce v 1 vláknu obsluhuješ postupně jednotlivé sockety, ale to je vhodné spíš pro pomalé počítače a malý počet klientů. Lepší řešení je použít thread pool http://en.wikipedia.org/wiki/Thread_pool(je to dokonce jeden z návrhových vzorů). Vytvoříš si omezený počet vláken a těm postupně přiřazuješ/odebíráš sockety. Je to rychlejší, díky tomu, že nemusíš neustále vytvářet a likvidovat vlákna. Navíc se ti nemůže stát, že se vytvoří moc vláken. .NET neznám, ale tipnul bych si, že thread pool bude součástí "standartní knihovny".
Ten ThreadPool na tu komunikaci s klienty neni spatny napad a dost se mi i zamlouva.
A jaky je podle vas nejlepsi system na streamovane posilani dat vetsimu poctu klientu? Vyhovuje ten system pomoci kolekci a prepinani socketu? (kdyz nepocitam priorizaci apod.)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Sitova karta — založil Zelenáč
Síťová komunikace — založil wokena
Win CE - síťová tiskárna — založil Pawl
Síťová komunikace v Pythonu — založil Jakub
C++ - Síťová knihovna (Sockets) — založil WUtttang
Moderátoři diskuze