Diskuze: Návrh Async TCP serveru s využitím async/await
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Tak začneme třeba serverem.
Metoda ServerStart je sice async, ale nevrací Task. Takže nemůžeme ji
zavolat s await.
Když teda spustím takový server, tak program hned skončí s výpisem
"konec";
static async Task Main(string[] args)
{
var server = new Server("127.0.0.1");
server.ServerStart();
Console.WriteLine("konec");
}
Chápeš proč? Jestli mi řekneš, že tobě to nedělá, tak končím 
Neni mozny, ze ma async Main a awaituje volani ServerStart() ?
Ja jsem kvuli tomu nainstaloval mono na linux a sice mam podporu jen C# 7, takze
async Main nevyzkousim, ale potvrzuju to co rikas. Program se ukonci.
Asi by potreboval poradne procist teorii async/await.
Já spíš tipuju, že má wpf aplikaci a server spouští v události na
klik tlačítka. Takže si toho ani nevšimne.
EDIT: await nemuzes pouzit na metodu async void
Asi se celou dobu nechápeme co vlastně chci, vždyť tohle je ale přesně to co potřebuju, co by měl vracet nějaký asynchroní start serveru? já ho potřebuji jen odstartovat. pak jen ve smyčce připojovat klienty vevnitř.
Já mám pocit, že celou dobu základní teorii async/await chápu. Jen se nechápeme co očekávám od konkrétní implementace.
Jinak je to jen console app.
Obsah mainu je prakticky nepodstatný, obsluhuju v něm psaním commandů aplikační databázi.
Pro informaci Main je prakticky takovýdle:
private static void Main(string[] args)
{
Server server = new Server("192.168.1.101");
server.ServerStart();
for (string command = Console.ReadLine(); command != "EXIT"; command = Console.ReadLine())
{
// všemožné commandy
}
}
Nojo, jenze tobe pri zivote ten server drzi ta smycka. To je vono
.
Tak já teda nevím, co vlastně chceš. Async/await nechceš řešit, nebudu
to už řešit. Tvoje použití bude fungovat, ale je to dost nestandardní.
Tak třeba další tip: rozdělit server a psaní příkazů do 2 vláken
(server do nového vlákna, příkazy nechat v původním).
Pak se běžně dělá, že server naslouchá v odděleném vlákně a klienti
se obsluhují v dalším vlákně. Případně se použije jedno vlákno na
jednoho klienta. Tam už záleží na povaze aplikace.
Takže to už máme 3 vlákna: příkazy, server (accept), server (klienti)
Zobrazeno 7 zpráv z 7.