回答:
私はここで聖戦を始めるつもりはありませんが、ほとんどのインターネットサービス(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など)。
このアーキテクチャでは、透過的な方法で水平方向に(サーバーを追加して)拡張できます。
ゲームはターンベースになるため、リアルタイムの更新はそれほど重要ではありません。これを行う最も簡単な方法は、すでに構築されたサーバーを使用することです。Webサーバーを使用します。ゲームを移植する価値のあるプラットフォームであれば、WebサーバーにあるWebサービスへのアクセスが容易になります。
ほぼリアルタイムで更新を提供するために、ロングポーリングを検討することをお勧めします。そのリンクのコードは、サーバー側からのロングポーリングの最も基本的な実装を提供します。しかし、肝心なことは、リソースに対してリクエストが行われると、サーバーは、リクエストされたデータが利用可能になるまでブロッキング呼び出しを実行するということです。次に、このプロセスを繰り返します。
どのデータを送り返す必要があるかについては、常にクライアントを敵対的なものとして扱います。クライアントは「ターンステート」が何であれ送信する必要があります。サーバーはそれを検証し、すべてがチェックアウトされると、接続されているすべてのクライアントに新しい「ゲームステート」を送信します。
-
SOAP Webサービスはおそらく開始するのに最適な場所(リンク)であり、簡単に開始でき、ほとんどのWebフレームワークはそれらを公開する方法を提供します。また、RESTfulサービスを検討することもできますが、通常、シリアライゼーションプロセスの少し多くがコンシューマに任されます。
AndroidでSOAP Webサービスを利用する場合は、こちらをご覧ください。
SOAPやHTTPを使用するのはやり過ぎだと思います。単純なTCP接続で独自のプロトコルを定義するだけです。たとえば、コマンドとして送信されたテキストの各行を解釈します。クライアントとサーバーが送信できるコマンド/応答を定義します。
FICSはそのように機能し、長年にわたって何千人ものチェスプレーヤーにサービスを提供しています。IRCも同様に機能します(RFC 1459を参照)。