网络引擎设计的思考.docx
- 文档编号:2861140
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:14
- 大小:55.34KB
网络引擎设计的思考.docx
《网络引擎设计的思考.docx》由会员分享,可在线阅读,更多相关《网络引擎设计的思考.docx(14页珍藏版)》请在冰豆网上搜索。
网络引擎设计的思考
网络引擎设计的思考
网络引擎设计的思考1
一、网络引擎的用途1
二、网络库2
1、网络库的层次2
2、辅助类集合2
3、工具类集合2
三、数据库3
四、应用实例库3
1、休闲网游基本框架3
2、各部分最小最必要的功能4
五、一般化的服务器和客户端设计5
六、具体化游戏服务器、客户端的开发6
1、根据应用库已有的服务器、客户端进行实例化6
2、根据网络库的服务器、客户端重新设计7
七、休闲游戏服务器的相关逻辑设计7
1、用户基本信息7
2、社交相关信息7
3、游戏服务器(GameServer)数据结构信息7
4、登录服务器(LoginServer)的逻辑设计8
5、游戏服务器(GameServer)的逻辑设计8
6、消息服务器(MessageServer)逻辑设计9
7、服务器端需要载入的资源文件10
八、系统优化的考虑10
一、网络引擎的用途
为了架设高效的C/S和P2P的网络结构的程序,快速开发分布式的服务器端程序以及客户端的网络传输部分,网络引擎提供了经过实践验证了的网络传输模块,服务器端管理客户端连接的模块(C/S),客户端之间通信模块(P2P),以及相应的所有实用的工具。
网络引擎让开发者不需要考虑网络的结构和传输,而把更多的时间用来开发应用程序。
开发者唯一要做的就是对现有的引擎进行配置,增加应用程序的逻辑部分。
考虑到网络游戏是这一引擎的主要应用对象,所以此文档所提到的分布式架构都是基于网络游戏的。
设计成三个类库:
网络库、数据库和应用实例库。
二、网络库
1、网络库的层次
层次编号
具体说明
Net_Layer_1
实现最底层的inetaddress,socket,iocp,internet的包装类。
Net_Layer_2
实现Channel、Session、Context、FtpInternet、DispatchService这些最基本的利用Net_Layer_1进行数据传输的类。
Net_Layer_3
实现TcpService、IocpService、UdpService、FtpService这些构成服务器和客户端的最基本功能的服务类。
Net_Layer_4
实现Server和Client这两个最基本的服务器和客户端的程序架构。
2、辅助类集合
线程类
Thread
最基本的线程的实现
TcpThread
Tcp接收和发送时进行通知,构成TcpService的重要部分
UdpThread
Udp接收和发送时进行通知,构成UdpService的重要部分
IocpAcceptThread
管理IocpService接收连接
IocpAsyncIoThread
管理IocpService会话数据的传送和接收
DispatchThread
对接收到的数据进行分发处理的线程,在TcpService,UdpService,IocpService中都有用到
ScheduleThread
用于定时执行任务的线程
Monitor、synchronized
处理线程的同步
缓冲类
AdjustableBuffer
可变大小的buffer,用于接收和发送缓冲区
RotativeBuffer
循环buffer,用于接收和发送缓冲区
3、工具类集合
时间类
ScheduleService
定时执行任务的服务
Profiler
设置计时的时刻,计算时间的流逝
日志类
Log
日志格式化输出
Viewer、WindowViewer、ConsoleViewer
日志显示
配置类
Properties、Loader、FileLoader、StringTokenizer
通过配置文件配置参数
RegEditor
操作注册表
ResourceInterface
通过资源文件载入不同语言的文字
文件类
Directory
搜索文件和文件夹
FileFactory
搜集文件的信息
系统类
System
搜集系统信息
GlobalUnqiueId
生成全局唯一标示码
AuthCrypt
加密解密数据包
三、数据库
对数据库访问的操作进行封装
ODBC基本架构
MYSQL基本架构
四、应用实例库
这一层是应用层,继承Net_Layer_4的类和数据库的类来实现具体的应用程序。
根据网络游戏基本的架构提供网游服务器和客户端的最基本程序架构。
1、休闲网游基本框架
休闲网络游戏服务器基本架构
MonitorServer
监视所有的服务器,定时收集信息
PatchServer
提供客户端版本号检测以及对客户端进行更新
LoginServer
检测登录信息是否正确
MessageServer(optional)
转发游戏服务器之间的消息
GameServer
开设房间,进行游戏主要的服务器,P2P的公网服务器
DbCacheServer
接受请求,访问数据库,返回请求结果
RelayServer
P2P穿孔失败时进行转发的服务器
休闲网络游戏客户端基本架构
PatchClient
进行版本号检测、下载和安装补丁
DummyClient
没有图像显示的客户端,只用于测试,P2P穿孔。
休闲网络游戏容器库基本架构
ReservedFileInfoFactory
用于文件更新
LastFileInfoFactory
用于文件更新
UserItemInfoFactory
生成唯一码,维持此码和UserItemInfo的map,用map是由于保持物品顺序的插入
FriendUserInfoFactory
玩家好友
FriendUserGroupInfoFactory
玩家好友组
UserInfoFactory
生成唯一码,维持此码和UserInfo的hashmap
AvatarInfoFactory
生成唯一码,维持此码和AvatarInfo的hashmap
PetInfoFactory
生成唯一码,维持此码和PetInfo的hashmap
AvatarEquipmentInfoFactory
商品码对应装备的hashmap
PetEquipmentInfoFactory
商品码对应装备的hashmap
OtherEquipmentInfoFactory
商品码对应装备的hashmap
ExperinceInfoFactory
经验计算公式以及级别所需经验
NotificationInfoFactory
服务器的各种公告信息
ArticleInfoFactory
各种商品码以及商品属性
MasterCodeInfoFactory
各种商品的功能
UserSkillInfoFactory
Avatar和Pet所使用的技能
2、各部分最小最必要的功能
MonitorServer
(1)接受所有服务器组的服务器的注册。
(2)定时收集服务器的状态信息。
(3)对服务器进行关闭的操作。
PatchServer
(1)接受PatchClient的连接。
(2)检测客户端版本,进行客户端更新。
DbCacheServer
(1)接受同服务器组内的指定的服务器的注册。
(2)提供登录、退出、邮件操作、好友操作、记录日志和版本号检测时的数据库操作。
LoginServer
(1)接受同服务器组的游戏服务器(GameServer)和中转服务器(RelayServer)的注册。
(2)接受玩家的登录,并发送游戏服务器列表。
MessageServer
(1)转发玩家的消息到指定服务器的另一玩家。
(2)拍卖行功能的实现。
GameServer
(1)玩家登录和退出。
(2)玩家创建游戏房间、游戏房间列表的信息更新、游戏房间内部的准备、踢人和开始游戏。
(3)好友系统。
(4)聊天系统。
(5)商店系统。
(6)拍卖系统。
(7)物品栏、玩家信息查看。
RelayServer
(1)转发房间的创建和销毁。
(2)数据转发。
五、一般化的服务器和客户端设计
六、具体化游戏服务器、客户端的开发
1、根据应用库已有的服务器、客户端进行实例化
优点
节省开发时间,根据现有相似功能的范型进行实例化,修改自己所需要的参数,添加相应功能。
缺点
修改范围和功能都有所限制,不能随心所欲。
2、根据网络库的服务器、客户端重新设计
优点
可以根据本身自己的需求写出完全符合要求的程序。
缺点
开发时间较长,对代码要熟悉。
七、休闲游戏服务器的相关逻辑设计
1、用户基本信息
信息名称
信息说明
UserInfo
玩家基本信息,如用户ID、NAT类型,这些信息与登录游戏以及玩家进行游戏时的网络通信有关。
这个信息每个玩家只有一份。
AvatarInfo
隶属于UserInfo,表示玩家创建角色的信息,如角色的级别、经验和装备。
这个信息取决于游戏允许一个ID拥有的角色的个数。
PetInfo
隶属于AvatarInfo,表示此角色所拥有的宠物的信息,如宠物的级别、经验和装备。
这个信息取决于游戏允许一个角色拥有的宠物的个数。
AvatarEquipmentInfo
隶属于AvatarInfo,表示此角色穿在身上的装备信息,游戏中应该有个上限。
一个角色只有一份。
PetEquipmentInfo
隶属于PetInfo,表示此宠物穿在身上的装备信息,游戏中应该有个上限。
一个宠物只有一份。
OtherEquipmentInfo
隶属于AvatarInfo,表示角色装备的特殊道具的信息。
一个角色只有一份。
AvatarItemInfo
隶属于AvatarInfo,表示此角色所有道具的信息,也就是相当于背包的里的物品信息。
一个角色只有一份。
2、社交相关信息
信息名称
信息说明
FriendGroupInfo
朋友组信息,玩家根据朋友类别进行的分组,每个角色一份信息。
FriendAvatarInfo
朋友信息,玩家的朋友角色信息。
LetterList
玩家角色的邮件列表信息,每个角色只有一份。
3、游戏服务器(GameServer)数据结构信息
信息名称
信息名称
BlockBlockManager
频道信息,服务器需要分频道的时候使用,每个频道内的玩家操作由同一个线程处理。
RoomRoomManager
玩家进行游戏时的房间信息,每个频道一份。
ArenaArenaManager
玩家进行竞技赛时的竞技场信息,用于将两个房间内的玩家合并到同一个竞技场,每个频道一份。
4、登录服务器(LoginServer)的逻辑设计
登录/登出过程的逻辑设计
(1)首先,验证用户名和密码,有错误返回错误,无错误则登录成功;
(2)从数据库读取用户的当前使用的Avatar的基本信息和装备,此Avatar当前选择的宠物的装备。
(3)发送GameServer的地址列表给客户端。
(4)提供给玩家选择Avatar的权利,每次选择后,会重新从数据库读取当前选择的Avatar的基本信息和装备,以及宠物的装备。
(5)提供给玩家创建Avatar的权利,创建好的Avatar成为当前的Avatar。
(6)登出LoginServer,修改数据库的登录标示,开始连接游戏GameServer。
GameServer信息收集的逻辑设计
(1)每个Gam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 引擎 设计 思考