2010-07-12 135 views
10

我想要构建一款基于回合的多人游戏iPhone游戏,需要一个游戏服务器来连接玩家并展示世界状态数据。我试图了解游戏服务器如何工作,以便我可以开始设计和构建它。到目前为止,我只有在构建Web应用程序方面的经验,所以自然我的想法是想设计游戏服务器以与Web服务器类似的方式工作,但是可以吗?Web服务器和游戏服务器有什么区别?

我在过去的工作中使用过的ASP.NET MVC Web服务器通过向服务器发送一些网页数据的请求,服务器生成HTML或XML或JSON并将其返回给客户端一个HTTP数据包。这个过程听起来和多人游戏完全一样,除了客户端可能不会请求HTML,但是请求XML或JSON数据是有意义的,对吗?

所以我的问题是...

  1. 能否在游戏服务器中使用ASP.NET MVC编写和工作一样使用一个RESTful API由我设计了一个Web服务器?
  2. 是否有更好的方法来请求和接收游戏数据,而不是使用包含XML或JSON数据的HTTP数据包?从游戏服务器返回的数据将很小。
  3. 使用一个RESTful API从Web服务器是有道理的访问数据,但使用一个RESTful API从游戏服务器请求的游戏数据没有意义,事实上,听起来像它可能会导致安全问题,你的想法?
  4. 最后,谁可以推荐任何好的游戏书籍,展示如何建立一个体面的游戏服务器的例子?

非常感谢提前对你的帮助!

+1

WCF服务可能比MVC更有意义,因为实际上没有UI,只是数据交换。 – Jason 2010-07-12 15:13:41

+0

@Jason,谢谢!这看起来非常好。 – BeachRunnerFred 2010-07-12 15:20:11

回答

3

Web服务器是缺少一个重要的组成部分...

IE。他们是无国籍的。整个网络平台(以及一般的HTTP服务器)基于它们是无状态的模式,这意味着当您从页面切换到页面时,它们不会保留数据。

周围有限制的方式。在客户端:您可以使用会话在浏览器打开时保存数据;或Cookie来长期存储数据。在服务器端:数据库通常用于长期存储状态。所以......

  1. 是的,但是这取决于有多少和多久你要存储一个游戏会话的状态,你可能会发现,单独运行游戏服务器/引擎(而不是作为一个Web服务器)将给你更多的空间在未来扩展/增长。

  2. 是的,没有...... XML/JSON几乎是在互联网上传递对象状态的方式,因为它很简单且与平台无关。由于您可能/不会编写自己的服务器后端,因此建议您在考虑使用XML-RPC之前考虑从头开始编写自己的解决方案。

  3. 我不确定你为什么对安全性有偏执。如果您针对可接受的请求/响应周期实施相当严格的访问策略,则不应该有任何问题。就像我之前说过的,看看XML-RPC。关键是,不要让用户访问比他们需要更多的游戏服务器数据。

  4. 不,主要是因为我不写游戏。虽然,我确实有编写客户机/服务器体系结构应用程序的经验,但这不是火箭手术。我建议你看看加入Game Development Stack Exchange FAQ网站即将达到测试版。

+0

谢谢,埃文,这个XML-RPC看起来非常好。你有没有使用任何的.NET实现?如果是的话,任何建议/建议? – BeachRunnerFred 2010-07-12 16:07:43

+0

@BeachRunnerJoe不,我没有。我只提出了XML-RPC,因为它是一个众所周知的Web服务架构。如果你想开始使用它,Stack Overflow应该有大量实际使用它的人提供的信息。看到这个开始。 http://stackoverflow.com/questions/1348503/how-to-use-xmlrpc-in-c – 2010-07-12 16:29:14

8

的主要区别在于,网络服务器产生大量使用(相对)很少或没有状态信息相对静态内容。即使在使用状态时,它通常是特定于会话或用户。读取比写入要频繁得多,所以缓存可以帮助提高吞吐量。您还可以信任Web浏览器以(相对)可靠的方式传递一些状态数据和Cookie。

相反大部分时间来自客户端的方式更新游戏服务器端,保留了大量的全局状态(所有的游戏,玩家,状态状态),当他们要求将它们发送状态更新到客户端。缓存是不可能的,你不能相信你的客户告诉你一天的时间 - 你必须假设他们会尽力以任何可能的方式作弊。

使用REST API是没有这样的问题,因为你可以使用你已经使用标准的认证机制。

Beautiful Architecture”这本书的第3章介绍了Darkstar(now RedDwarf)项目的体系结构,该项目是用于在线游戏和虚拟世界的可扩展应用程序服务器。虽然RedDwarf的规模比您想要的要大得多,但本书确实描述了创建游戏服务器时需要解决的问题。

相关问题