我想建立一个基于回合制的多人iPhone游戏,需要游戏服务器在某个地方连接玩家并传输世界状态数据。我试图了解游戏服务器的工作方式,以便我可以开始设计和构建游戏服务器。到目前为止,我只有构建Web应用程序的经验,所以我自然而然地希望设计游戏服务器以与Web服务器类似的方式工作,但它可以吗?
我过去使用过的ASP.NET MVC Web服务器,客户端将一些网页数据请求发送到服务器,服务器生成HTML或XML或JSON,并将其返回给客户端。 HTTP数据包。对于多人游戏来说,这个过程听起来完全相同,除了客户端可能不会请求HTML,但是请求XML或JSON数据是有意义的,对吗?
所以我的问题是......
非常感谢您的帮助!
答案 0 :(得分:8)
主要区别在于Web服务器使用(相对)很少或没有状态信息生成大量相对静态的内容。即使使用状态,它通常也特定于会话或用户。读取比写入更频繁,因此缓存可以帮助提高吞吐量。您还可以信任Web浏览器以(相对)可靠的方式传递一些状态数据和cookie。
相反,游戏服务器大部分时间处理来自客户端的更新,保持大量的全局状态(所有游戏,播放器,状态)并在请求时向客户端发送状态更新。缓存是不可能的,你不能相信你的客户告诉你一天中的时间 - 你必须假设他们会试图以任何方式作弊。
使用REST API不是一个问题,因为您可以使用已经使用的标准身份验证机制。
“Beautiful Architecture”一书的第3章描述了Darkstar(现在的RedDwarf)项目的体系结构,这是一个用于在线游戏和虚拟世界的可扩展应用程序服务器。虽然RedDwarf的规模比你想要的大很多,但本书确实描述了你在创建游戏服务器时需要解决的问题。
答案 1 :(得分:3)
网络服务器缺少一个重要组件......
IE。他们是无国籍的。 Web的整个平台(以及一般的HTTP服务器)基于它们无状态的模式,这意味着当您从页面切换到页面时,它们不会保留数据。
有限制的方法。在客户端:您可以在浏览器打开时使用会话来保存数据;或cookie来长期存储数据。在服务器端:数据库通常用于长期存储状态。所以......
是的,但是根据您想要存储游戏会话状态的时间和长度,您可能会发现单独运行游戏服务器/引擎(而不是作为网络服务器)会给您带来很多未来有更大的扩展/成长空间。
是的,没有...... XML / JSON几乎是在互联网上传递对象状态的方式,因为它简单且与平台无关。由于您可能/不会编写自己的服务器后端,因此建议您在考虑从头开始编写自己的解决方案之前先使用XML-RPC。
我不确定你为什么对安全感到偏执。如果对可接受的请求/响应周期实施非常严格的访问策略,则不应存在任何问题。就像我之前说过的那样,看看XML-RPC。关键是,不要让用户访问任何比他们需要的更多的游戏服务器数据。
不,主要是因为我不写游戏。虽然,我确实有编写客户端/服务器架构应用程序的经验,但这不是火箭手术。我建议您加入Game Development Stack Exchange常见问题解答网站即将推出测试版。