`
hepeng19861212
  • 浏览: 147150 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

某ARPG网页游戏djws服务器端(java)程序结构分析

    博客分类:
  • java
阅读更多

一、通信架构:
基于Mina 2.0.4 

  • MdcInjectionFilter:用于记录相关信息到日志中,以便开发者进行bug诊断。
  • ByteAttackFilter:限制 最大连接数,最大活动连接数,BLOCKED_IPS,BLOCKED_PLAYER_IDS(虽然进行了这个判断,但是没有获取到playerId,所以不起过滤作用),字节数防洪
  • CmdAttackFilter:BLOCKED_IPS,BLOCKED_PLAYER_IDS(不起过滤作用),数据包防洪
  • ProtocolCodecFilter(ProtocolCodecFactory):用于消息的解码和编码ProtocolCodecFactory包装了decoder和encoder的实现RequestDecoder和ResponseEncoder。
    其中:
    1.RequestDecoder负责处理消息断包、粘包 和反序列化。支持两种反序列化方式:AMF3反序列化成ASObject;java class反序列化成java object。
    2.ResponseEncoder负责消息序列化、封包,可序列化对象包括IoBuffer、byte[]和Response。支持两种序列化方式:AMF3和java class序列化。注:在djws-server中,response消息 可序列化对象只有Response。
  • ExecutorFilter(OrderedThreadPoolExecutor):配置了IoHandler处理请求消息的线程池。对于一个session,线程池将按io event/request message先后顺序进行处理。
  • IoHandler:request消息处理器。WarriorsServerHandler的职能:
    1.收到消息时,IP黑名单的过滤,匿名cmd的校验(有的命令必须是登陆过的用户才能发送)、管理员必须为mis客户端;
    2.转发request到ServerHanlder中(之后再由ServerHanlder调用Dispatcher转发器,根据消息类型(moduleId),把消息转发给相应的handler模块处理);
    3.session关闭时,触发ContainerFacade中的登出listener(并删除玩家数据);session打开时,判断是否是MIS ip和管理员配置的open ip。

    二、Request处理过程
    Module与Handler一一对应。在一个handler中,包含若干个cmd。 Cmd与Invoker一一对应。

     之后invoker从ASObject中读取请求数据,调用封装好的facades和managers进行业务处理。

三、消息格式:基于二进制字节流

修正:最后一张图是response protocol,其中的最后一个字段也是respoonse value:object
四、业务架构:
Module:

public static final int ADMIN = 10000;
  public static final int CHAT = 1;
  public static final int CHANNEL = 2;
  public static final int USER = 3;
  public static final int MAP = 4;
  public static final int TASK = 5;
  public static final int PROPS = 6;
  public static final int SKILL = 7;
  public static final int FIGHT = 8;
  public static final int SHOP = 9;
  public static final int FRIENDS = 10;
  public static final int TEAM = 11;
  public static final int ALLIANCE = 13;
  public static final int MERIDIAN = 14;
  public static final int LOOT = 15;
  public static final int TRAIN = 16;
  public static final int FLYSHOES = 17;
  public static final int CAMP = 18;
  public static final int DUNGEON = 19;
  public static final int PET = 20;
  public static final int MORTAL = 21;
  public static final int HORSE = 22;
  public static final int TRADE = 23;
  public static final int MARKET = 24;
  public static final int TITLE = 25;
  public static final int DUNGEONTASK = 26;
  public static final int NOTICE = 27;
  public static final int RANK = 28;
  public static final int LOTTERY = 29;
  public static final int VIP = 30;
  public static final int GIFT = 31;
  public static final int TREASURE = 32;
  public static final int ACTIVE = 33;
  public static final int CAMP_BATTLE = 34;
  public static final int MAIL = 35;
  public static final int BATTLE_FIELD = 36;
  public static final int ACHIEVE = 37;
  public static final int RECHARGE_GIFT = 38;

 

五、程序组织结构/分层:

1.通用组件 jar

eventBusdbservice resourceService SessionManager SchedulerPusher

2.game common

--Service(ResourceAdapter )voFactory--PusherastarcommonConstant(common result code)

3.单一模块 内部结构

 

为了提高复用性,--Pusher 一般只在façade层调用。

金字塔的任何一层,可能会调用通用组件、common 模块和其他模块的facademanager

 

4.包结构组织还是很清晰的,值得借鉴:

.......
 

 

  • 大小: 77.5 KB
  • 大小: 56.2 KB
  • 大小: 136.8 KB
  • 大小: 8.9 KB
  • 大小: 2 KB
  • 大小: 2 KB
分享到:
评论
1 楼 hepeng19861212 2014-09-15  
问:CacheServiceImpl中,COMMON_CACHE和ENTITY_CACHE的区别?
答:ENTITY_CACHE仅用于存放entity,即项目中BaseModel的所有子类的实例。而common cache之所以就是common的,是因为它可以存储所有的数据结构,比如Integer,Long,Map<>,List<>等等结构。
    此外,ENTITY_CACHE本身就支持缓存过期时间。但是common cache其实也是支持entity cache的所有特性,就是说common cache中也可以放入CacheObject,从而支持缓存entity、过期时间的特性。
    使用者在使用cacheService和CachedServiceAdpter两套api时,就要根据上述原则来使用了。

相关推荐

    安装NumPy教程-详细版

    附件是安装NumPy教程_详细版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    语音端点检测及其在Matlab中的实现.zip

    语音端点检测及其在Matlab中的实现.zip

    C#文档打印程序Demo

    使用C#完成一般文档的打印,带有页眉,页脚文档打印,表格打印,打印预览等

    DirectX修复工具-4-194985.zip

    directx修复工具 DirectX修复工具(DirectX repair)是系统DirectX组件修复工具,DirectX修复工具主要是用于检测当前系统的DirectX状态,若发现异常情况就可以马上进行修复,非常快捷,使用效果也非常好。

    Python手动实现人脸识别算法

    人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在0.6 以下都可以被认为是同一张脸 人脸识别的主要步骤 1 获得人脸图片 2 将人脸图片转为128D的矩阵(这个也就是人脸特征的一种数字化表现) 3 保存人脸128D的特征到文件中 4 获取其他人脸转为128D特征通过欧式距离算法与我们保存的特征对比,如果差距在0.6以下就说明两张脸差距比较小

    全国大学生信息安全竞赛知识问答-CISCN 题库.zip

    ciscn 全国大学生信息安全竞赛知识问答-CISCN 题库.zip

    JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译).zip

    JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)

    strcmp函数应用.zip

    strcmp函数应用.zip

    蓝桥杯单片机第十一届国赛设计题试做

    蓝桥杯单片机第十一届国赛设计题试做

    基于MATLAB的pca人脸识别.zip

    基于MATLAB的pca人脸识别.zip

    520.html

    520.html

    JAVA在线考试管理系统(源代码+LW+开题报告+外文翻译+英文文献+答辩PPT).zip

    JAVA在线考试管理系统(源代码+LW+开题报告+外文翻译+英文文献+答辩PPT)

    STR710的定时器编程C语言例子,开发环境为IAR EWARM。.zip

    STR710的定时器编程C语言例子,开发环境为IAR EWARM。.zip

    基于物品的协同过滤推荐算法(Python).zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

    JAVA文件传输(lw+源代码).zip

    FTP(File Transfer Protocol)是文件传输协议的简称。 FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。 目前FTP服务器软件都为国外作品,例如Server_U、IIS,国内成熟的FTP服务器软件很少,有一些如(Crob FTP Server),但从功能上看来远不能和那些流行的服务器软件媲美。

    python项目源码-深度学习tensorflow的滚动轴承故障诊断方法源码(高分大作业).rar

    本项目基于深度学习TensorFlow框架,针对滚动轴承故障诊断方法进行研究。项目采用了卷积神经网络(CNN)对轴承振动信号进行特征提取和分类,实现了对滚动轴承不同故障类型的自动诊断。 在技术实现上,项目利用TensorFlow搭建了一个高效的CNN模型,通过多层卷积、池化操作以及全连接层,自动学习轴承振动信号中的故障特征。同时,采用交叉熵损失函数优化模型参数,提高故障识别率。此外,项目还集成了数据预处理、模型训练、测试评估等功能模块,方便用户快速上手并进行实验研究。 经过运行测试,该项目代码运行稳定,诊断效果良好,可广泛应用于滚动轴承故障诊断领域。对于计算机相关专业的在校学生、老师或企业员工来说,该项目是一份难得的高分大作业资源,同时也是小白学习和实际项目借鉴的优秀参考资料。请放心下载使用,为您的学习和工作提供帮助!

    超详细的SpringBoot框架入门教程 Spring Boot框架快速入门教程以大量示例讲解了Spring Boot在各类情境

    超详细的SpringBoot框架入门教程 Spring Boot框架快速入门教程以大量示例讲解了Spring Boot在各类情境中的应用,让大家可以跟着老师的思维和代码快速理解并掌握。适用于Java 开发人员,尤其是初学Spring Boot的人员和需要从传统 Spring 转向 Spring Boot 开发的技术人员。 下边是动力节点的SpringBoot教程非常适合初学入门,讲的非常详细,而且全程无废话!

    毕业设计[主机域名]ISPConfig 3.0.1.3_ispconfig3-codepub.zip

    毕业设计[主机域名]ISPConfig 3.0.1.3_ispconfig3-codepub.zip

    matlab开发-用交叉熵优化多变量宏观模型随机多极值优化.zip

    matlab开发-用交叉熵优化多变量宏观模型随机多极值优化.zip

Global site tag (gtag.js) - Google Analytics