2013-10-24

Web 开发程序员谈网游服务器开发

Views: 13909 | 6 Comments

今天参加了一个和某网游开发团队的交流, 感受到了网游开发和 Web 开发之间的巨大差异, 所以我写了本篇博文.

传统的网游开发者可能由于更大的精力放在游戏逻辑上面, 并且因为游戏客户端是一个高度内聚逻辑复杂的终端程序, 所以网游开发者在开发服务器端的时候, 也容易把客户端的经验放在服务器端, 很少考虑动态可扩展性和服务容灾性.

Web 开发的一些经验对网游服务器开发是非常有用的:

1. 服务(子系统)无状态化,
2. 所以服务可以采用 Web 模式来开发, 也即 Web Server + 脚本语言 + 存储

服务(子系统)无状态化是整个系统动态可扩展性和服务容灾性的保证. 例如在 Web 系统中, 一个全静态内容的网站是无状态的, 只要部署了多个服务器, 那么用户访问任何一台服务器都 OK. 这个例子说明了服务无状态化是系统可扩展性和容灾性的保证, 同时也隐含了一个要求: 数据是同步的.

网游程序员会立即提出疑问, 你举的例子是静态网站, 但网游服务器的子系统可不是那样的, 能实现无状态化吗? 比如, 用户连接到了某台网游服务器, 这台服务器上面会保存有这个用户的很多信息数据, 如果用户断开连接再连到另一台服务器, 那他的数据不是全丢了吗?

其实, 如果把服务分成逻辑(指令)+存储/状态(数据), 那就可以把有状态的服务改造成无状态的服务. 因为一般的网游服务器把逻辑和存储绑在一起, 所以做不到无状态化, 所以, 也就无法动态地增加了减少服务器.

一旦把逻辑和存储分开(如 PHP + MySQL), 就可以使用 Web 技术来开发网络游戏服务器. 逻辑本身肯定是无状态的, 所以可以任意添加和减少服务器和实例. 而存储本身经过开发, 也可以做到无状态, 如 MySQL 集群和其它的存储群集. 把一个有状态的服务改成无状态的服务, 可以通过简单地把逻辑和存储分离即可.

Related posts:

  1. MySQL命令行按Delete键输出”~”的问题
  2. 在线状态服务在网站系统中的应用
  3. MySQL binlog查看和清理
  4. 小数据与大数据
  5. 用SSDB快速开发一个微博(Twitter)demo
Posted by ideawu at 2013-10-24 00:05:42

6 Responses to "Web 开发程序员谈网游服务器开发"

  • 一个是latency要求,一个是一般游戏每逻辑区人数不会太多,因此直接紧耦合(逻辑,数据)系统实现简单。 Reply
  • 不敢苟同,除了那些策略类的,其他的rpg,act之类的,跟web模式差别很大。
    上面有人也说了,游戏的两大因素,延迟和状态维护,对游戏是极其重要的。
    而web要弱的多 Reply
  • 我觉得博主有些对,有些错。现在的多数的网游 后端都是逻辑和存储,网络分开的。。。。。 Reply
    @wangwallwind: 多谢分享. Reply
  • 使用Web技术来开发网游服务器不是不可以,只是网游服务器有其特殊性,比如低延时等,使用Web技术无法或者很难达到满意的效果。
    其实两者技术上是相似的,
    Web = Http服务器 + Web开发技术
    网游 = 网游服务器 + 网游开发技术
    除去服务器方面的显著差异,网游开发技术和Web开发技术,差别并不大。
    具体的逻辑开发大多都是借助脚本语言,PHP,Python,Lua,Javascript。
    只是在各自领域,脚本语言的流行程度不同。 Reply
    @Jacky: 是的, 网络游戏的逻辑可能会很复杂. 但有些网游逻辑不复杂, 实时性也不是严格要求. 即使是前者, 还是可以尽量往无状态服务(子系统)方面考虑. Reply

Leave a Comment