【问题标题】:Code examples for simple game servers简单游戏服务器的代码示例
【发布时间】:2010-10-08 17:13:09
【问题描述】:

我想为 Game Center 构建一个 iPhone 游戏,目前正在研究其中的服务器部分。我通过示例学习得最好,我很难找到任何简单的游戏服务器示例来演示......

  1. 数据如何格式化并发送到服务器以及如何接收数据
  2. 如何验证正在发送/接收的数据以避免玩家作弊等
  3. 游戏服务器代码如何与 DB 一起构建

我想使用 Ruby on Rails 构建游戏服务器,但我会选择使用任何框架的任何示例,只是为了了解这些概念是如何工作的。有没有人知道任何书籍或在线资源已经涵盖了这一点或显示了一些关于如何构建游戏服务器的示例代码?

我不得不认为 iPhone 上的大多数多人游戏都需要玩家服务器,但我似乎找不到任何资源来讨论如何构建一个。我发现讨论构建多人游戏的任何资源(包括 Apple 的文档)都说了同样的话,“开发游戏服务器超出了本书的范围,但我们将专注于连接到此类所需的客户端代码服务器。”

非常感谢您的帮助!

编辑:关于我要完成的工作的更多细节......

我正在尝试开发一款两人(可能更多人)游戏,在该游戏中,用户比其他玩家更快地解决难题。匹配将由游戏中心处理,但我需要一个游戏服务器来启动/管理游戏并将结果存储在数据库中。整个过程将类似于...

  1. Game Center 将两名玩家配对
  2. 将玩家数据发送到服务器以初始化新游戏
  3. 游戏开始由服务器同步
  4. 游戏开始,每位玩家尝试解开谜题
  5. 当任一玩家完成时,服务器会收到通知
  6. 只要两个玩家都完成比赛,服务器就会响应结果并将结果存储在服务器上。

【问题讨论】:

  • 你能告诉我们更多细节吗?你在开发什么类型的游戏?你只需要配对吗?整个游戏状态是在服务器上,还是 iPhone 负责计算一切?同步有多重要,例如您需要每 10 毫秒更新一次吗? 1000 毫秒?或者它甚至是一个基于回合的游戏?还要记住,RoR 仍然是一个面向请求的框架,而不是通常用于长期套接字连接的框架。我最近在 Node.js 中构建了一个,效果很好。
  • 谢谢,Ivo,我刚刚添加了更多细节。我将为此研究 Node.js,因为我也一直想使用该框架。你能给我一些建议来弄清楚你做了什么吗?

标签: iphone client-server


【解决方案1】:

好的,在阅读您的编辑后,我认为 Node.js 应该可以很好地完成这项工作。

关于你的观点:

  1. 我不知道配对是如何工作的(猜想你会得到一对左右的密钥来验证请求),但无论编程语言如何,它都应该很难实现。

  2. 简单:设置服务器、处理连接、保存正在运行的游戏列表、为每个游戏跟踪状态(玩家、时间等),这应该是最大值(取决于消息协议你用..) 150-200 行

  3. 当您认为该游戏已准备好时,只需向给定游戏中的每个玩家发送某种准备好的事件(就像每个人都触摸了“我准备好了”按钮左右)

  4. 好的,这里有一些提示:

    1. 跟踪服务器上剩余/经过的时间并将其发送给玩家,计时器很快就会关闭(我在大约 3 分钟内有 4-5 秒)

    2. 为了防止作弊,验证服务器上的动作,这在益智游戏的情况下应该相当容易。您还可以检查每次移动之间的时间,所有低于 50 毫秒的内容都应该是可疑的,但这主要取决于谜题的难度。

  5. 通过检查服务器上的动作,这也很容易,您不必依赖客户端向您发送“看我完成了”消息。

  6. 再次简单,只需发送带有随附数据的事件并将点记录到数据库中。

最重要的一点显然是防止作弊,如果是解谜游戏,电脑可以很容易地解决问题,不可能完全防止。不过,有了上面的提示,你可以让它变得更难。

但请记住,当游戏很简单时,你无法阻止人们在高分上作弊,在游戏中建立越来越多的保护是没有意义的。专注于游戏玩法,使其对人类而言有趣且简单,但对计算机而言则复杂且不可预测

如果是 DB,呃...我想你可以使用 MongoDB,但我还没有在 Node 下玩过。

哦,如果您想了解一下您可以使用 Node.js 做什么,这是我构建的游戏:
http://github.com/BonsaiDen/NodeGame-Shooter

所有逻辑都在服务器上运行,客户端只绘制他们知道的东西,我有一个可玩的原型,并在两个晚上运行。

【讨论】:

  • 这就是我如此喜欢的原因!我真的很感谢你的努力,我现在要开始挖掘了!
【解决方案2】:

我最近构建了一个客户端服务器应用程序,服务器端基于Netty。有许多很好的例子可以说明事情如何在他们的网站上运行。事实证明,它也表现良好。对于游戏,您还可以考虑使用 Google ProtoBuffers - Netty 网站上也有一个例子。

【讨论】:

    【解决方案3】:

    您知道,GameKit API 包含允许您向游戏中的其他玩家发送数据的功能。您可能需要考虑改用它,因为它可以为您节省大量从头开始构建游戏服务器的工作,并且您可以使用 Apple 久经考验的网络基础设施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多