安卓/ iOS回合制棋盘游戏的游戏服务器


9

我目前正在编写iPhone游戏,我想创建一个在线多人游戏模式。将来,该应用程序将移植到Android设备,因此我想知道如何创建游戏服务器?

首先,我应该选择哪种语言?如何使服务器能够与用Objective-C和Java编写的程序进行通信?

那么,如何有效地做到这一点呢?如果我通过客户端打开套接字(有2个),那好吗?我应该向服务器发送什么样的信息?给客户?

Answers:


7

我并不是要在这里发动一场圣战,但是大多数互联网服务(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等)。

这种体系结构允许您以透明方式横向扩展(添加更多服务器)。


4

由于您的游戏将以回合制为基础,因此实时更新并不重要。最简单的方法是使用已经建立的服务器,我将使用Web服务器。值得将游戏移植到的任何平台都应有助于访问位于Web服务器上的Web服务。

为了几乎实时提供更新,我建议您调查长时间轮询。该链接上的代码提供了从服务器端进行长轮询的最基本的实现。但最重要的是,一旦对资源提出请求,服务器就会执行阻塞调用,直到请求的数据可用为止。然后,您一次又一次地重复该过程。

关于应该发送回什么数据,请始终将客户端视为敌对对象。客户端应发送其“转折状态”为任何内容,服务器对其进行验证,然后,如果一切检查完毕,它将新的“游戏状态”发送回所有连接的客户端。

-

SOAP Web服务可能是最佳的启动位置(链接),它们很容易上手,并且大多数Web框架都提供了一种公开它们的方法。您可能还希望研究RESTful服务,但是它们通常将更多的序列化过程留给使用者。

要在Android上使用SOAP Web服务,请看这里


您好,感谢您的回复。但是我还不知道如何将数据发送到我的Web服务?如何序列化用户输入(这里是我的8 * 8板上的移动,例如:玩家1从[0,0]到[1,1]),然后如何序列化游戏状态?
西里尔

检查我添加的两个链接。他们应该使您开始使用SOAP Web服务,这可能是最简单的入门方法。
Nate

对于Android和iOS,您无需使用长时间轮询。Apple Push Notifications或Google Cloud Messaging可让您将数据从服务器推送到设备。
马特2012年

2

我认为使用SOAP甚至HTTP都是过大的。只需通过原始TCP连接定义自己的协议即可。例如,解释作为命令发送的每一行文本。定义允许客户端和服务器发送哪些命令/响应。

FICS就是这样工作的,多年来已经为成千上万的棋手服务。IRC也是如此(请参阅RFC 1459)。


HTTP具有以下优点:它可以使用代理,几乎没有防火墙,它使用HTTPS提供近乎透明的加密,并具有多种身份验证方法...
sam hocevar 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.