7

我目前正在编写一个 iPhone 游戏,我想创建一个在线多人游戏模式。将来这个应用会移植到安卓设备上,所以我想知道如何创建游戏服务器?

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

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

谢谢你的时间。

4

2 回答 2

8

编辑你的游戏会有多大规模的多人游戏?

嗨西里尔,

正如您所注意到的,有两个主要考虑因素:

  1. 发送到服务器的信息

  2. 发送给客户的信息

只有一种类型的信息要发送到服务器:用户输入。如果你不这样做,当流氓客户端试图向你的服务器发送虚假数据时(比如说“我的坦克现在有 100 000 000 护甲”),你会头痛不已。

那么您发送给客户端的内容取决于您,但完全有可能只向客户端发送其他玩家的输入。这是使绝对最小和极小的带宽使用成为可能的方法。这就是暴雪的魔兽争霸3等游戏的做法。作为奖励,这会生成很小的重播文件(因为要重播游戏,您需要做的就是每个玩家输入发生的时间(和输入))。

仅将其他玩家的输入发送到客户端的一个缺点是这意味着所有游戏的逻辑都存在于每个客户端上。对于某些游戏,这可能是一个问题,因为人们可能会通过对游戏进行逆向工程并发现缺陷来作弊。这个问题可以通过仔细、受控的随机化来缓解(除了输入+时间,您发送输入+时间+随机性,其中客户端无法提前猜到随机性。

另一种方法是在服务器端进行一些逻辑计算。然后,显然,您需要将服务器计算的结果发送给客户端。如果操作正确,这样做的好处是既可以防止作弊,又可以防止盗版(例如,没有人设法在真实经济中玩魔兽世界——也就是说,在真实的暴雪服务器上——使用伪造的许可证密钥)。

关于手机回合制游戏服务器:看看一款最畅销的回合制游戏在做。以 Uniwar 为例:适用于 iPhone 和 Android。游戏服务器“当然”是用 Java 编写的。

要意识到的一件事是,像您计划编写的游戏这样的游戏完全是确定性的:如果您无法轻松编写回放器代码,或者无法轻松重现导致逻辑错误的任何场景,那么您就是做错了。

请注意,确定性并不意味着您不能向玩家添加看起来像随机性的东西:只是随机性也应该是确定性的(例如,只需为每个游戏使用不同的种子 + 玩家输入的时间)作为假随机源制作)。

于 2011-02-12T17:49:48.690 回答
3

这是对所问问题的一个横向解决方案。您的选择之一是使用 Gamooga ( http://www.gamooga.com/ ),因此您无需担心服务器端、套接字、传输逻辑等。您可以专注于您的游戏逻辑并开发这比所需的系统东西。

Gamooga 为您提供在游戏中使用的实时通信平台。您可以将您的服务器端消息处理脚本上传到 Gamooga 的集群,并在您的应用程序中使用它的 iOS API 来从/向服务器端发送和接收消息。服务器端由 Gamooga 为您自动扩展和管理。您可以下载 SDK 并从 SDK 中的演示开始。

披露:我是 Gamooga 的创始人,仅在与问题相关时才回复。

于 2012-03-12T13:16:05.493 回答