【问题标题】:What's the difference between a Web Server and a Game Server?Web 服务器和游戏服务器有什么区别?
【发布时间】:2011-03-14 20:31:55
【问题描述】:

我想构建一款基于回合制的多人 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. 最后,谁能推荐一些好的游戏书籍,展示如何构建一个像样的游戏服务器的例子?

非常感谢您的帮助!

【问题讨论】:

  • WCF 服务可能比 MVC 更有意义,因为实际上没有 UI,只有数据交换。

标签: iphone asp.net-mvc multiplayer


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

    • 谢谢,Evan,这个 XML-RPC 看起来很不错。您曾经使用过任何 .NET 实现吗?如果有,有什么建议/建议吗?
    • @BeachRunnerJoe 不,我没有。我只提出 XML-RPC 是因为它是一种众所周知的良好的 Web 服务架构。如果您想开始使用它,Stack Overflow 应该有大量信息可以从实际使用它的人那里获得。请参阅此开始。 stackoverflow.com/questions/1348503/how-to-use-xmlrpc-in-c
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2018-01-09
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多