2011-06-18 19 views
6

Pracuję nad małą grą sieciową (tylko LAN) z jednym komputerem działającym jako serwer i wszystkimi innymi (w tym rzeczywistą grą działającą na tym samym komputerze) działającym jako klienci. Zasadniczo serwer jest przejrzysty dla użytkowników, ale istnieje dla uproszczenia zarządzania stanem dla mnie. Podstawową koncepcją, jaką mam teraz, jest to, że komputer każdego gracza powie: "Hej, chciałbym zagrać" przez rozgłaszanie i utrzyma listę innych graczy w sieci. Po każdym uruchomieniu gry wskazuje, że są one gotowe, jeden komputer jest wybrany jako serwer, a reszta domyślnie dla klientów.Wybieranie komputera w sieci lokalnej jako serwera

Wybierając komputer w sieci LAN, który ma służyć jako serwer, czy istnieje jakiś ustalony sposób wyboru i poinformowania innych?

Wymyślałem podstawową ideę, że po prostu komputery wszystkich graczy wybierają liczbę losową i mają serwer z najniższym (lub najwyższym, nie ma znaczenia) serwerem (regeneracja losowych liczb dla komputerów, które rzucić ten sam). Każdy komputer otrzyma "wyrzuconą" liczbę pozostałych i może określić, który z nich będzie serwerem, po którym mógłby się z nim połączyć. Wydaje się to prymitywne, ale nie jestem pewien, czy ma to znaczenie, ponieważ wszystkie komputery fizycznie znajdowałyby się w tej samej sieci w odległości kilku stóp od siebie. Czy byłoby to odpowiednie zadanie, czy też istnieje znacznie lepszy sposób?

+5

Koncepcja ta jest znana jako [wybory przywódcze] (http://en.wikipedia.org/wiki/Leader_election) w przetwarzaniu rozproszonym. – chrisaycock

+1

@chrisaycock Bardzo ciekawa koncepcja, dzięki za wskazanie. Wykorzystując to jako punkt wyjścia, pojawiły się już bardzo pomocne dokumenty i inne zasoby. – Gemini14

Odpowiedz

5

Szczerze mówiąc, podjąłbym decyzję nieco bardziej skomplikowaną. Byłbym skłonny przeprowadzić pewne podstawowe zbieranie informacji w celu ustalenia, który komputer ma największą moc i wybiera, że ​​jest on najstarszym (moc jest celowo niejasnym terminem, ponieważ najmocniejszy komputer będzie zależał od wymagań serwera i gry) . Podaj, że serwer będzie musiał uruchomić dodatkowe oprogramowanie (serwer oprócz gry), co oznacza, że ​​jeśli wszystkie komputery mają taką samą specyfikację, lepiej będzie pasowało do tego zadania niż inne. Tak długo, jak wszystkie węzły przeprowadzają tę samą ocenę danych, wszystkie powinny osiągnąć konsensus co do tego, kto powinien prowadzić, lub że pierwszy węzeł, który stworzył grę, będzie odpowiedzialny za określenie, który węzeł powinien być serwerem.

Warto również skonfigurować serwer tak, aby okresowo sprawdzał, czy jego kwalifikacje są niższe. Na przykład można uruchomić procesy w tle, które mogłyby przeszkodzić w prawidłowym działaniu, lub w dołączenie do gry silniejszy węzeł. Oczywiście przeniesienie serwera hostującego grę byłoby nietrywialne, ale warto o tym pomyśleć. (pamiętaj, że dzieje się to w grach online, np. w Halo, gdy łączność wszystkich klientów z serwerem spada poniżej pewnego progu, gra zostaje wstrzymana i przywrócona na innym serwerze, który może zapewnić lepszą wydajność).

Powiązane problemy