云风详解网易网络游戏服务器的构架

2023-10-25 12:18

本文主要是介绍云风详解网易网络游戏服务器的构架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2007-12-06 09:03

由中国最大的IT技术社区CSDN联合美国权威IT技术媒体CMP集团举办的国内权威顶级软件技术大会——“2007 软件开发2.0技术大会”(SD2C)已经完美闭幕。在本次大会上,网易技术研发经理、《大话西游》、《梦幻西游》、《网易泡泡游戏》主力开发者云风为听众讲解了网易网络游戏服务器的构架。

一。引擎三大部分

基于 freebsd 的服务器
跨平台的客户端
二进制跨平台
支持 Win32 MacOs Linux Freebsd
3d 部分基于 openGL
C 语言编写底层、逻辑部分动态脚本语言
开发用相关工具
跨平台命令行工具
Windows 下的视觉编辑工具

二。服务器的设计
底层全部由 C 语言编写
逻辑层语言无关
类 COM 的模块化设计
多语言混合编程
多进程单线程结构
服务器组内各进程功能有明显的层次划分
数据和逻辑分离

三。服务器群
单一登陆点做进入系统的认证
全局数据库仅保存用户身份信息
不保持常连接
玩家可以在整个大世界中发生联系
物理上玩家分属不同服务器组管理
用户数据库各自独立,无须实时交互
虚拟世界中的距离即物理世界上的距离

四。服务器组间消息传递
避免交互性协议
游戏设计上考虑远程通讯的时间差
允许数据复制,并考虑多个副本相遇时的处理
每组服务器有唯一的数据输入输出点
海关服务
玩家的交互受游戏设计的限制
限制是为了更丰富的可能性
虚拟世界的战争、贸易以及资源分配

五。外部连接处理
多个外部接入点
国情问题:电信网通问题
特别通道:用于管理人员进入
组播
分组管理的问题
心跳控制
流水线作业
时间控制
录象回放调试(监督数据合法性)
聊天信息分离
利用广播服务器减低负载
广义聊天信息

六。时间校对
校对玩家机器和服务器组的时间
防止时间作弊
估算消息发生时刻,更流畅的完成交互动作
精确保证时间的一致性
NTP 协议的问题
Client 的不合作(区分恶意和无意)
服务器组间的时间校对
心跳控制

七。数据服务
唯一的数据储存点
使用本地文件系统
使用简单文本结构
使用简单的交互协议
物品发放服务
虚拟物品的控制
数据监控和备份

八。开发经验和教训
曾经追求大一统的设计
过分信赖 C++
设计模式滥用
数据应当文本化
应将每单个任务足够简化
不为尚不存在的需求做设计

讲师介绍:云风

网易公司技术研发经理,自幼学习编程,具有15年编程经验。大学时代开发的游戏图象引擎“风魂”曾用于多家游戏公司的游戏项目。是《大话西游》、《梦幻西游》、《网易泡泡游戏》等网络游戏的主力开发者。《大话西游》和《梦幻西游》是网易最主要的两款网络游戏,颇受玩家喜爱,创造了国产网络游戏的高潮。目前《梦幻西游》的注册人数已经突破1.2亿,《大话西游》和《梦幻西游》的同时在线人数已逾百万。云风在工作之余,不忘分享编程经验,他著有《游戏之旅——我的编程感悟》一书,内容横跨了游戏程序的过去、现在和未来。书中传达的不仅是一些实用的技术经验,更是传达一种理念——“在实践中积累”的研发精神。从05年至今,云风在带领团队开发新的3D网络游戏引擎。爱好广泛,尤喜编程、读书、攀岩。

这篇关于云风详解网易网络游戏服务器的构架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282520

相关文章

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的