Answers:
我并不是要在这里发动一场圣战,但是大多数互联网服务(flickr,twitter,facebook等)都已放弃SOAP,转而使用RESTful webservices和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)。