大世界网络游戏服务器的构架Deepcold游戏引擎引擎三大部分•基于freebsd的服务器•跨平台的客户端–二进制跨平台–支持Win32MacOsLinuxFreebsd–3d部分基于openGL–C语言编写底层、逻辑部分动态脚本语言•开发用相关工具–跨平台命令行工具–Windows下的视觉编辑工具服务器的设计•底层全部由C语言编写•逻辑层语言无关–类COM的模块化设计–多语言混合编程•多进程单线程结构•服务器组内各进程功能有明显的层次划分•数据和逻辑分离具体设计服务器群•单一登陆点做进入系统的认证–全局数据库仅保存用户身份信息–不保持常连接•玩家可以在整个大世界中发生联系–物理上玩家分属不同服务器组管理–用户数据库各自独立,无须实时交互–虚拟世界中的距离即物理世界上的距离登陆过程服务器组间的消息传递服务器组间消息传递•避免交互性协议–游戏设计上考虑远程通讯的时间差–允许数据复制,并考虑多个副本相遇时的处理•每组服务器有唯一的数据输入输出点–海关服务•玩家的交互受游戏设计的限制–限制是为了更丰富的可能性–虚拟世界的战争、贸易以及资源分配服务器组的内部结构外部连接处理•多个外部接入点–国情问题:电信网通问题–特别通道:用于管理人员进入•组播–分组管理的问题•心跳控制–流水线作业–时间控制–录象回放调试(监督数据合法性)•聊天信息分离–利用广播服务器减低负载–广义聊天信息时间校对•校对玩家机器和服务器组的时间–防止时间作弊–估算消息发生时刻,更流畅的完成交互动作•精确保证时间的一致性–NTP协议的问题–Client的不合作(区分恶意和无意)•服务器组间的时间校对•心跳控制数据服务•唯一的数据储存点–使用本地文件系统–使用简单文本结构–使用简单的交互协议•物品发放服务–虚拟物品的控制•数据监控和备份系统登陆与灾难处理•门卫–用户登陆排队–登出登记•黑洞–从灾难中恢复–保持跟玩家的有限交互游戏逻辑的实现•多进程单线程结构–避免进程间通讯–严格控制数据进出–做好灾难处理•特殊功能模块的设计–帮派/行会,交易所……–避免全局数据交互•Client/Server通讯:RPC–避免依赖单一语言工具,创建合适的小语言•语言无关的模块设计开发经验和教训•曾经追求大一统的设计•过分信赖C++•设计模式滥用•数据应当文本化•应将每单个任务足够简化•不为尚不存在的需求做设计谢谢云风