当前位置: 首页 > wzjs >正文

绍兴网站制作企业口碑营销的案例有哪些

绍兴网站制作企业,口碑营销的案例有哪些,网站建设服务方案ppt模板,济宁百度推广价格前言 废话,最近把工作中用的基于XMPP协议的经典开源框架又读了一遍,整理一下其优秀的源码学习记录。 概述 AbstractMessageReceiver是tigase核心组件MessageRouter、SessionManager的抽象父类,是tigase消息接收器的抽象。AbstractMessageR…

前言

废话,最近把工作中用的基于XMPP协议的经典开源框架又读了一遍,整理一下其优秀的源码学习记录。

概述

AbstractMessageReceiver是tigase核心组件MessageRouter、SessionManager的抽象父类,是tigase消息接收器的抽象。AbstractMessageReceiver使用的是模板的设计模式。对消息接收的基础封装。

类图整体框架分析

类图

抽象接收器主要的实现的核心接口是MessageReceiver接口,该接口定义了接收消息的主要的接口,MesageReceiver接口的核心就是管理路由RegexRouting和往队列中添加数据包操作(addPacket)。AbstractMessageReceiver类实现了接口的所有方法,并向子类提供一个processPacket(Packet)方法进行自定义实现。所以MessageRouter和SessionManger都是重写processPacket(Packet)实现对接受到的消息进行自定义的处理。

其他的接口和类的简介:

  • BasicComponent:全局组件化类的定义实现,tigase官方的全局组件化和可扩展都是基于这个类的实现。后面专门会有一篇文章进行介绍。
  • PacketWriterWithTimeout:相应带超时时间的一个接口定义
  • StatisticsContainer: 统计接口的定义,不是核心,暂时不作为学习的重点

核心数据结构及线程模型分析

基本数据结构介绍

数据和线程模型主要是基于四个成员变量out_queues、in_queues、threadsQueueIn、threadsQueueOut 围绕进行的。其中out_queues、in_queues两个成员变量是两个处理Packet的优先级队列的列表。threadsQueueIn、threadsQueueOut是两个QueueListener的双向队列,QueueListener由上面的类可知,是一个包含可以处理Packet的优先级队列线程的内部类,作用是对出入队消息进行监听和处理。

内部线程数据处理模型

内部线程数据处理模型是一个线程对应一个优先级队列进行数据的处理。线程监听到数据对列中有数据就去take(),take()之后根据消息类是IN_QUEUE还是OUT_QUEUE进行不同数据包的处理。线程数据处理模型如下图所示。

线程数据处理模型图

那么线程模型和队列是如何绑定起来的呢?我们通过初始化的源代码进行分析一下。源码如下所示:

    /*** 开启线程,初始化QueueListener监听线程,绑定线程和对列*/private void startThreads() {...//入队(接收)线程(双向对列)为空,初始化操作if (threadsQueueIn == null) {threadsQueueIn = new ArrayDeque<>(8);//创建指定入队线程,默认是1for (int i = 0; i < in_queues_size; i++) {QueueListener in_thread = new QueueListener(in_queues.get(i), QueueType.IN_QUEUE);in_thread.setName("in_" + i + "-" + getName());in_thread.start();threadsQueueIn.add(in_thread);}}//出队(转发)线程(双向对列)为空,初始化操作if (threadsQueueOut == null) {//创建指定出队的线程,默认是1threadsQueueOut = new ArrayDeque<>(8);for (int i = 0; i < out_queues_size; i++) {QueueListener out_thread = new QueueListener(out_queues.get(i), QueueType.OUT_QUEUE);out_thread.setName("out_" + i + "-" + getName());out_thread.start();threadsQueueOut.add(out_thread);}}    ...
}

以上代码是接受器启动调用的核心代码(其中省略了一些日志打印和监听相关的非核心代码),核心就是根据优先级队列进行循环遍历,创建对应的监听器,并设置优先级队列给对应的优先级队列。

小结

AbstractMessageReceiver对象是消息接收器的核心实现,模版的设计模式有利于代码的复用,公共代码的抽象,1对1的线程队列数据处理模型充分利用多线程的优势,并发的处理数据,优先级队列保证了数据处理的顺序性。

http://www.dtcms.com/wzjs/785638.html

相关文章:

  • 邹平建设局网站建设银行网站怎么短信转账
  • 宁波网络建站微信网页版登录手机版
  • 卖营销软件的网站欧派全屋定制
  • 乐都区公司网站建设雄县哪做网站
  • 做网站需要icpwordpress安装没反应
  • 网站备案的规定南京专业做网站
  • 山东做网站的公司有哪些发布消息做任务的网站
  • 网站建设报告家教总结眼科医院网站设计怎么做6
  • 南阳做网站多少费用wordpress 添加登录界面
  • seo优化网站多少钱排名优化网站建设
  • 做承诺的网站网上商城系统模板
  • 网站开发流程需要用到的语言网站推广服务公司
  • wordpress文章标题总有网站名教务管理系统可行性研究报告
  • 网站安全检测软件装修公司展厅效果图设计图片
  • 网站要怎么备案html写手机网站吗
  • 宝塔面板wordpress多站点wordpress上传图片错误媒体库错误
  • 规划院网站建设书公司单页设计
  • 南昌网站建设制作与维护wordpress 主题 积分
  • app源码网站注册网站流程及资料
  • 俄罗斯女孩制作论文网站兰州网络推广服务合同
  • 美食网站开发的难点做兼职比较好的网站有哪些
  • 做影视网站能赚到钱吗代理小程序项目
  • 开网站的宣传图片怎么做外包加工活
  • 做网站 多页面网址怎么弄做网站的分页查询
  • 网站建设刂搜金手指下拉贰肆浙江省邮电工程建设有限公司网站
  • 网站扫码怎么做的传奇游戏排行榜
  • 门户网站建设安全管理制度做品牌网站的
  • 网站建设全包哪家便宜电商首页模板网站
  • 镇江网站建设制作wordpress自适应博客主题
  • 为网站 做字幕网页升级中每天自动更新什么意思