IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Erik Šťastný:22.2.2017 10:45

Zdravíčko, mám server, který využívá blokující metody a pro každého clienta vytvářím nové vlákno, což už jsem se mnohokrát na internetu dočetl, že není nejlepší řešení.

Stručný popis jak to teď funguje:

            while (true)
            {
                TcpClient Client = Server.AcceptTcpClient();
                Thread NewThread = new Thread(() => StartClient(Client));
                NewThread.Start();
            }

Pseudo kód pro StartClient:

            while (true)
            {
                Message = Blocking read
                if (Message == xxx)
                {
                      Send response yyy
                }
                else
                {
                      Send response zzz
                }
            }

Otázkou je jak to můžu předělat, Async IO se snažím již nějakou dobu pochopit, ale bohužel se mi podle tutoriálů stále nedaří to pochopit.

Druhá věc mě napadla to rozděli jen na pár vláken a objekty, které mezi sebou budou vyvolávat eventy když např. čeká client na připojení nebo přijde nová zpráva.

Může mě prosím navést jaký způsob použít, popřípadě poradit s tím jak? děkuji moc!

 
Odpovědět
22.2.2017 10:45
Avatar
Erik Šťastný:23.2.2017 9:11

bump :-`

 
Nahoru Odpovědět
23.2.2017 9:11
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Erik Šťastný
Petr Čech:24.2.2017 20:45

Zkus použít

Parallel.For

místo toho prvního while. Vytvoří to ideální počet vláken a mezi ně rozdělí práci.

Nahoru Odpovědět
24.2.2017 20:45
the cake is a lie
Avatar
Odpovídá na Petr Čech
Erik Šťastný:8.3.2017 12:30

Pardon za dlouhé odmlčení, nějak není čas, nějak nevím co tím myslíš, čeho toho dosáhnu? Mám pocit, že v současné době mám aplikaci, tak, že nemůžu jen tak přepsat tohle :)

 
Nahoru Odpovědět
8.3.2017 12:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.