Android / iOSターンベースのボードゲーム用のゲームサーバー


9

現在iPhoneゲームをプログラミングしていますが、オンラインマルチプレイヤーモードを作成したいと考えています。将来的には、このアプリはAndroidデバイスに移植される予定なので、ゲームサーバーを作成する方法を考えていましたか?

まず最初に、どの言語を選択すればよいですか?サーバーがobjective-cとJavaで書かれたプログラムの両方と通信できるようにする方法は?

次に、それを効果的に行う方法は?クライアントでソケットを開くとよいですか(2つあります)?どのような情報をサーバーに送信する必要がありますか?クライアントに?

回答:


7

私はここで聖戦を始めるつもりはありませんが、ほとんどのインターネットサービス(flickr、twitter、facebookなど)はSOAPを落とし、シリアル化された形式としてRESTful WebサービスとJSONを支持しています。基本的に同じですが、RESTサービスはurlとhttpメソッドに依存して、何をすべきかを定義します。例えば

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

JSON-json.orgに記述されている-はXMLよりも単純で、おそらく無関係ですが、リクエストごとに数バイト節約できます。前の例に続いて、記事をJSON表記で説明する方法を次に示します。

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

IOSの場合、この素敵な記事がありますhttp://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/言及 http://code.google.com/p/json-framework /データを解析および生成します。

ターンベースであるため、サーバー上のHTTPセッションに依存して状態を維持できるため、サーバーへの永続的なソケット接続を維持する必要はありません。すべてのサーバー側言語がこれをサポートします(php、python、javaなど)。

このアーキテクチャでは、透過的な方法で水平方向に(サーバーを追加して)拡張できます。


4

ゲームはターンベースになるため、リアルタイムの更新はそれほど重要ではありません。これを行う最も簡単な方法は、すでに構築されたサーバーを使用することです。Webサーバーを使用します。ゲームを移植する価値のあるプラットフォームであれば、WebサーバーにあるWebサービスへのアクセスが容易になります。

ほぼリアルタイムで更新を提供するために、ロングポーリングを検討することをお勧めしますそのリンクのコードは、サーバー側からのロングポーリングの最も基本的な実装を提供します。しかし、肝心なことは、リソースに対してリクエストが行われると、サーバーは、リクエストされたデータが利用可能になるまでブロッキング呼び出しを実行するということです。次に、このプロセスを繰り返します。

どのデータを送り返す必要があるかについては、常にクライアントを敵対的なものとして扱います。クライアントは「ターンステート」が何であれ送信する必要があります。サーバーはそれを検証し、すべてがチェックアウトされると、接続されているすべてのクライアントに新しい「ゲームステート」を送信します。

-

SOAP Webサービスはおそらく開始するのに最適な場所(リンク)であり、簡単に開始でき、ほとんどのWebフレームワークはそれらを公開する方法を提供します。また、RESTfulサービスを検討することもできますが、通常、シリアライゼーションプロセスの少し多くがコンシューマに任されます。

AndroidでSOAP Webサービスを利用する場合は、こちらをご覧ください


こんにちは、あなたの応答をありがとう。しかし、自分のWebサービスにデータを送信する方法がまだわかりません。ユーザー入力をシリアル化する方法(ここでは、8 * 8ボードでの移動:プレーヤー1の[0,0]から[1,1]への移動)と、ゲームの状態をシリアル化する方法
Cyril

追加した2つのリンクを確認します。SOAP Webサービスの使用を開始する必要があります。これは、おそらく最も簡単に開始できる方法です。
ネイト

AndroidとiOSの場合、ロングポーリングを使用する必要はありません。Apple Push NotificationsまたはGoogle Cloud Messagingを使用すると、サーバーからデバイスにデータをプッシュできます。
Matt

2

SOAPやHTTPを使用するのはやり過ぎだと思います。単純なTCP接続で独自のプロトコルを定義するだけです。たとえば、コマンドとして送信されたテキストの各行を解釈します。クライアントとサーバーが送信できるコマンド/応答を定義します。

FICSはそのように機能し、長年にわたって何千人ものチェスプレーヤーにサービスを提供しています。IRCも同様に機能します(RFC 1459を参照)。


ただし、HTTPにはいくつかの利点があります。プロキシを使用でき、ほとんどファイアウォール化されておらず、HTTPSを使用したほぼ透過的な暗号化を提供し、いくつかの認証方法を備えています...
sam hocevar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.