游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10036|回复: 4

游戏服务器端引擎——DogSE的设计

[复制链接]

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2016-4-18 21:06:28 | 显示全部楼层 |阅读模式
  就DogSE的设计目标来说,它定位为千人左右的页游服务器,在不修改任何底层模块的情况下可以快速的写各种游戏业务。就算是新人在熟悉2~3天后也可以开始写一个游戏。

  项目可以从github获得,访问地址:https://github.com/dogvane/DogSE

  1、DogSE的基本结构
1.png


  对于一个游戏再代码层面可以分为3个部分

  1.与所有游戏无关的代码(DogSE的Core和Library 项目)

  2.特定游戏类型的基础代码

  3.具体游戏相关的业务代码

  对于DogSE来说,它所完成的任务就是与游戏无关的底层代码,在第二阶段,会根据不同的游戏类型,补充一些特定游戏的基础代码,这些基础代码是已例子的方式提供,真正在用引擎开发时,只需要根据具体的游戏类型,选择对应的例子,并再这个基础上进行快速开发。

  2、DogSE一些组件的设计


  2.1 网络层设计

  网络层主要由2个对象组成Listener和ClientSession,当Listener开启监听后,当有socket发起连接后,会触发SocketConnect的事件。事件里面会带有一个ClientSession的对象用来区分每个客户端。这里采用模板,可以对每个客户端绑定一个指定类型的业务逻辑数据。目前这个T是消息包处理的NetSate对象。

2.png


  2.2 消息包处理

  消息包处理目前Core只提供了一个Byte读和写的基本类(PacketReader和 PacketWriter),后期根据不同项目的需求,可以采用不同的解析协议。DogSE默认用自定义的二进制流读写,后面将试着支持google的protobuf,以及一些其它的交换数据(json,xml)

3.png


  2.3 任务队列

  任务队列游戏运转的核心,任务分为网络任务(NetTask)和非网络任务(ActionTask,ParamActionTask),网络任务主要是客户端发起的请求,而非网络任务可能是某些定时回调的任务,一些异步任务的回调。PacketHander主要负责网络消息id对具体业务逻辑绑定。

4.png


  2.4 时间调度

  时间调度会开启一个线程监测当前时间调度队列里的TimeSlice对象是否达到执行要求。达到触发要求,会向TaskManager里添加一个ActionTask对象,用来执行对应的游戏业务逻辑。

5.png



作者:Yahle
原载:http://www.cnblogs.com/yahle
版权所有。转载时必须以链接形式注明作者和原始出处。

0

主题

4

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2016-4-21 13:27:50 | 显示全部楼层
拓扑结构 没有
系统性能及瓶颈分析 没有
只有几个类图。。。。。。

19

主题

193

帖子

653

积分

高级会员

Rank: 4

积分
653
发表于 2016-4-22 14:10:32 | 显示全部楼层
杭州宇石网络诚聘一名U3D客户端主程哦

19

主题

193

帖子

653

积分

高级会员

Rank: 4

积分
653
发表于 2016-4-22 14:11:17 | 显示全部楼层
欢迎戳扣联系 2396913657

0

主题

4

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2016-5-3 12:58:32 | 显示全部楼层
看到是C#开发,我选择了右上角的叉
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-9 01:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表