Serwer do gry turowej na Androida / iOS

9

Obecnie programuję grę na iPhone'a i chciałbym stworzyć tryb online dla wielu graczy. W przyszłości ta aplikacja będzie portowana na urządzenia z Androidem, więc zastanawiałem się, jak stworzyć serwer gier?

Po pierwsze, który język wybrać? Jak sprawić, by serwer mógł komunikować się zarówno z programami napisanymi w celu C, jak i Javie?

Jak więc to skutecznie zrobić? Czy dobrze jest, jeśli otworzę gniazdo przez klienta (będą 2)? Jakie informacje powinienem wysłać na serwer? do klientów?

Cyryl
źródło

Odpowiedzi:

7

Nie chcę tutaj rozpoczynać świętej wojny, ale większość serwisów internetowych (flickr, twitter, facebook i inne) odrzuca SOAP na rzecz RESTful webservices i JSON jako formatu serializowanego. Chociaż zasadniczo takie same, usługi REST polegają na metodzie url i http w celu zdefiniowania, na przykład, co należy zrobić

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - opisany w json.org - jest również prostszy niż XML i choć może nie ma znaczenia, pozwoli ci zaoszczędzić kilka bajtów na żądanie. Po poprzednim przykładzie oto, jak artykuł zostanie opisany w notacji JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

Dla iOS znajduje się ten miły artykuł http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/, który wspomina http://code.google.com/p/json-framework / do analizowania i generowania danych.

Będąc turowym, możesz polegać na sesjach HTTP na serwerze, aby utrzymać stan, więc nie ma potrzeby utrzymywania stałego połączenia gniazda z serwerem. Obsługuje to dowolny język po stronie serwera (php, python, java itp.).

Ta architektura pozwala skalować w poziomie (dodając więcej serwerów) w przejrzysty sposób.

guigouz
źródło
4

Ponieważ twoja gra będzie oparta na turach, aktualizacje w czasie rzeczywistym nie są bardzo ważne. Najprostszym sposobem na to jest użycie już zbudowanego serwera, wybrałbym serwer WWW. Każda platforma, na którą warto przenieść swoją grę, powinna ułatwić dostęp do usług internetowych znajdujących się na serwerze internetowym.

Aby zapewnić aktualizacje w czasie zbliżonym do rzeczywistego, zalecamy przyjrzenie się długiemu sondowaniu. Kod pod tym linkiem zapewnia najbardziej podstawową implementację długiego odpytywania ze strony serwera. Ale sedno jest takie, że po wysłaniu żądania do zasobu serwer wykonuje wywołanie blokujące, dopóki żądane dane nie staną się dostępne. Następnie powtórz ten proces jeszcze raz i jeszcze raz.

Jeśli chodzi o to, jakie dane należy odesłać, zawsze traktuj klienta jako wrogo nastawionego. Klient powinien wysyłać cokolwiek to jest „stan zwrotu”, serwer sprawdza go, a następnie, jeśli wszystko się sprawdzi, wysyła nowy „stan gry” z powrotem do wszystkich podłączonych klientów.

-

Usługi sieciowe SOAP są prawdopodobnie najlepszym miejscem do rozpoczęcia ( link ), łatwo je rozpocząć, a większość platform internetowych zapewnia metodę ich ujawnienia. Możesz także przyjrzeć się usługom RESTful, ale zwykle pozostawiają one nieco więcej procesu serializacji użytkownikowi.

Aby korzystać z usług internetowych SOAP na Androidzie, zajrzałbym tutaj .

Nate
źródło
Cześć i dziękuję za odpowiedź. Ale jeszcze nie rozumiem, jak wysłać dane do mojej usługi internetowej? jak serializować dane wejściowe użytkownika (tutaj ruch na mojej planszy 8 * 8 np. gracz 1 z [0,0] na [1,1]), a następnie jak serializować stan gry?
Cyril
Sprawdź dwa linki, które dodałem. Powinny one zacząć od korzystania z usług sieciowych SOAP, co jest prawdopodobnie najprostszym sposobem na rozpoczęcie pracy.
Nate,
W przypadku systemu Android i iOS nie trzeba używać długiego odpytywania. Powiadomienia Apple Push lub Google Cloud Messaging pozwolą ci przekazywać dane z serwera na twoje urządzenia.
Matt
2

Myślę, że używanie SOAP, a nawet HTTP to przesada. Wystarczy zdefiniować własny protokół za pomocą waniliowych połączeń TCP. Na przykład interpretuj każdy wiersz tekstu wysłanego jako polecenie. Zdefiniuj polecenia / odpowiedzi, które klient i serwer mogą wysyłać.

FICS działa w ten sposób i od wielu lat służy tysiącom szachistów. IRC też działa w ten sposób (patrz RFC 1459).

MDM
źródło
HTTP ma jednak kilka zalet: może korzystać z serwerów proxy, prawie nigdy nie jest zaporą ogniową, oferuje prawie przezroczyste szyfrowanie przy użyciu HTTPS, ma kilka metod uwierzytelniania ...
sam hocevar 14.04.2011