Web服务器和游戏服务器之间有什么区别?

时间:2010-07-12 14:46:30

标签: iphone asp.net-mvc multiplayer

我想建立一个基于回合制的多人iPhone游戏,需要游戏服务器在某个地方连接玩家并传输世界状态数据。我试图了解游戏服务器的工作方式,以便我可以开始设计和构建游戏服务器。到目前为止,我只有构建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. 最后,任何人都可以推荐一些好的游戏书籍,展示如何构建一个体面的游戏服务器吗?
  5. 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

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

相反,游戏服务器大部分时间处理来自客户端的更新,保持大量的全局状态(所有游戏,播放器,状态)并在请求时向客户端发送状态更新。缓存是不可能的,你不能相信你的客户告诉你一天中的时间 - 你必须假设他们会试图以任何方式作弊。

使用REST API不是一个问题,因为您可以使用已经使用的标准身份验证机制。

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

答案 1 :(得分:3)

网络服务器缺少一个重要组件......

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

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

  1. 是的,但是根据您想要存储游戏会话状态的时间和长度,您可能会发现单独运行游戏服务器/引擎(而不是作为网络服务器)会给您带来很多未来有更大的扩展/成长空间。

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

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

  4. 不,主要是因为我不写游戏。虽然,我确实有编写客户端/服务器架构应用程序的经验,但这不是火箭手术。我建议您加入Game Development Stack Exchange常见问题解答网站即将推出测试版。