Web 开发程序员谈网游服务器开发
今天参加了一个和某网游开发团队的交流, 感受到了网游开发和 Web 开发之间的巨大差异, 所以我写了本篇博文.
传统的网游开发者可能由于更大的精力放在游戏逻辑上面, 并且因为游戏客户端是一个高度内聚逻辑复杂的终端程序, 所以网游开发者在开发服务器端的时候, 也容易把客户端的经验放在服务器端, 很少考虑动态可扩展性和服务容灾性.
Web 开发的一些经验对网游服务器开发是非常有用的:
1. 服务(子系统)无状态化,
2. 所以服务可以采用 Web 模式来开发, 也即 Web Server + 脚本语言 + 存储
服务(子系统)无状态化是整个系统动态可扩展性和服务容灾性的保证. 例如在 Web 系统中, 一个全静态内容的网站是无状态的, 只要部署了多个服务器, 那么用户访问任何一台服务器都 OK. 这个例子说明了服务无状态化是系统可扩展性和容灾性的保证, 同时也隐含了一个要求: 数据是同步的.
网游程序员会立即提出疑问, 你举的例子是静态网站, 但网游服务器的子系统可不是那样的, 能实现无状态化吗? 比如, 用户连接到了某台网游服务器, 这台服务器上面会保存有这个用户的很多信息数据, 如果用户断开连接再连到另一台服务器, 那他的数据不是全丢了吗?
其实, 如果把服务分成逻辑(指令)+存储/状态(数据), 那就可以把有状态的服务改造成无状态的服务. 因为一般的网游服务器把逻辑和存储绑在一起, 所以做不到无状态化, 所以, 也就无法动态地增加了减少服务器.
一旦把逻辑和存储分开(如 PHP + MySQL), 就可以使用 Web 技术来开发网络游戏服务器. 逻辑本身肯定是无状态的, 所以可以任意添加和减少服务器和实例. 而存储本身经过开发, 也可以做到无状态, 如 MySQL 集群和其它的存储群集. 把一个有状态的服务改成无状态的服务, 可以通过简单地把逻辑和存储分离即可.
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:ideawu 来源: idea's blog
- 标签: 网游
- 发布时间:2013-10-29 23:02:33
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] android 开发入门
- [54] 图书馆的世界纪录
- [53] Go Reflect 性能
- [50] 【社会化设计】自我(self)部分――欢迎区
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [39] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑