Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.

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

Java Java Když spadne server, jak udělám z klienta nový server? - networking American English version English version

Aktivity (1)
Avatar
Granny's Tuna:22. května 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. května 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. května 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. května 9:00
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Granny's Tuna:22. května 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. května 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. května 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. května 8:29
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Granny's Tuna:24. května 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. května 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.