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í.

Diskuze: Když spadne server, jak udělám z klienta nový server? - networking

Aktivity
Avatar
Granny's Tuna:22.5.2018 0:57

Určitě jste slyšeli někdy Raft Consensus, popřípadě Paxos algoritmus. Jde o to, že když spadne server, tak po heartbeatu clienti zjistí, že server není a domluví se na jiném. Toto by se dalo vyřešit i například Lamportovými hodinami, kdy se počká, až si všichni clienti vymění zprávu a ten, který ji receivne zprávu od všech ostatních jako první se stává serverem.

Jaká jsou další řešení kromě těchto (ještě mne napadá statická unikátnost), která bych mohl zkusit implementovat k vyřešení tohoto problému.

Potom se vás chci zeptat jestli mi doporučíte nějakej Discovery Algoritmus, abych našel ostatní clienty na síti (portu).

Odpovědět
22.5.2018 0:57
One of my most productive days was throwing away 1000 lines of code. ~ Gordon Bell
Avatar
Odpovídá na Granny's Tuna
Petr Štechmüller:22.5.2018 9:00

Ahoj, pokusil bych se Ti odpovědět na druhou otázku ohledně hledání ostatních klientů na sítí.
Řešil jsem stejný problém ve své hře. Po krátkém hledání jsem našel to, co jsem potřeboval.
Stačí, když pošleš na unicastovou adresu svůj definovaný datagram.
Ostatní klienti pak budou naslouchat na stejné adrese a když přijde zpráva, tak ji přečtou a pokud bude validní, dozví se informace o druhém klientovi.
Pokud budeš chtít, můžu poskytnout zdroják, jak to mám implementovaný...

Nahoru Odpovědět
22.5.2018 9:00
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Granny's Tuna:22.5.2018 22:49

Ahoj s tím zdrojákem budeš moc hodnej, ale neposílají se datagramy přes UDP? Já to mám celý v TCP, takže řeším sockety místo datagramů. Třeba to chápu špatně, ale myslím, že user data v socketu nejsou...ty jsou jenom v metadatech (port, adress, user data) packetu - datagramu. Každopádně se na to rád podívám.

Nahoru Odpovědět
22.5.2018 22:49
One of my most productive days was throwing away 1000 lines of code. ~ Gordon Bell
Avatar
Odpovídá na Granny's Tuna
Petr Štechmüller:23.5.2018 8:29

Jo, já to mám taky celý v TCPku, ale pouze posílání těch multicastů mám přes UDP.
Třídu LanServerFinder používám k přijímání multicast zpráv v klientské části
Třídu MulticastSender používám k vysílání zpráv na serverové části.
Může se zdát, že zatěžuji síť, ale dá se tam nastavit jednoduše delší prodleva.
Jinak, celé je to inspirováno kódem ke sdílení LAN serveru z MC. Tam mají tu prodlevu 1.5 vteřiny a ono to prostě funguje.
Neříkám, že ten kód je něco úžasného, ber to jenom jako příklad. Implementoval jsem to teprve tento týden, takže ještě vychytávám mouchy.

Nahoru Odpovědět
23.5.2018 8:29
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Granny's Tuna:24.5.2018 0:01

whoah moc dekuju...jeste jsem premyslel na to jak udelat ten server, ze kdyz spadne, tak jinej client zalozi novej...Napadlo me, ze kazdej client socket by mel nejaky ID, kazdej client by aktualizoval seznam ID vsech clientu a po padu serveru by client s nejnizsim ID zalozil server. Bohuzel nevim jak to nakodovat :/

Nahoru Odpovědět
24.5.2018 0:01
One of my most productive days was throwing away 1000 lines of code. ~ Gordon Bell
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 5 zpráv z 5.