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

Bea*_*red 10 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. 最后,任何人都可以推荐任何好的游戏书籍,展示如何构建一个体面的游戏服务器的例子吗?

非常感谢您的帮助!

Pan*_*vos 10

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

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

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

" 美丽建筑 " 一书的第3章描述了Darkstar(现在的RedDwarf)项目的架构,该项目是一个可扩展的在线游戏和虚拟世界应用服务器.虽然RedDwarf的规模比你想要的要大很多,但本书确实描述了在创建游戏服务器时需要解决的问题.


Eva*_*ice 5

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

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

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

  1. 是的,但根据您想要存储游戏会话状态的数量和时间,您可能会发现单独运行游戏服务器/引擎(而不是作为网络服务器)将为您提供更多的扩展/增长空间将来。

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

  3. 我不知道你为什么对安全如此偏执。如果您对可接受的请求/响应周期实施相当严格的访问策略,那么就不应该有任何问题。正如我之前所说,研究一下 XML-RPC。关键是,不要让用户访问超出他们需要的游戏服务器数据。

  4. 不,主要是因为我不写游戏。尽管如此,我确实有编写客户端/服务器架构应用程序的经验,而且这并不是火箭手术。我建议您考虑加入即将推出测试版的游戏开发堆栈交换常见问题解答网站。