博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tigase网络核心SockThread详解
阅读量:7041 次
发布时间:2019-06-28

本文共 1076 字,大约阅读时间需要 3 分钟。

总述

  • SocketThread类是一个很底层的类,在初始化时调用了Selector.open(clientsSel)。

  • socketReadThread nThread个

  • socketWriteThread nThread个

  • ResultsListener nThread个

  • completionService一个,池化线程nThread个,在sockThread.run里被submit,ResultsListener里进行completionService.take().get()取出执行结果。

  • forCompletion有序队列一个,在socketThread.run里开始add,同一方法立即被从最小依次取出,然后submit给completionService。

  • waiting有序队列一个,recreateSelector阶段存在add,最大来源是addSocketService静态方法,在 socketThread.run最后阶段的addAllWaiting时注册Channel时把waiting里的IOService取出做为附加对象 绑定。

重点方法

  • 主方法+两个有序队列,一个是等待处理队列,一个是完成队列。

  • forCompletion完成队列里的内容,交由具体的completionService完成后,由ResultListener相关线程处理最终结果。

  • 主方法:addSocketService。先判断是等发还是等收,取模进入对应的处理线程的wait队列。对应线程会由addAllWaiting触发网络绑定,主线程的死循环捕捉事件进行分发给completionService的动作。

  • addSocketService的IOService,应该是永远waitingToRead,有时waitingToSend。

  • 主方法:removeSocketService。取消绑定对应的SelectionKey。

SocketIO

  • 对SocketChannel的封装。

  • 用一个LinkedBlockingQueue来保存要发送的数据dataToSend。

  • 做了真正的流量统计。

ConnectionOpenThread

  • 这个类启动了accept的端口等待接入。

  • 接入后生成一个IOService,其中保存了socketChannel信息。

  • 传递IOService到可以waiting队列后,取出其中的socketChannel绑定事件,即可收发。

转载于:https://my.oschina.net/vdroid/blog/311961

你可能感兴趣的文章
团队事后分析
查看>>
mysql 关于列的语句
查看>>
博客作业2---线性表
查看>>
grub2引导安装kali2.0及安装ibus拼音输入法
查看>>
SQL常用命令
查看>>
Linux~Docker部分~
查看>>
Simple2D-15(音乐播放器)使用 glfw 库
查看>>
web.config 配置与获取
查看>>
据说每个大牛、小牛都应该有自己的库——DOM处理
查看>>
装饰器学习
查看>>
Mongodb Windows 集群
查看>>
linux 上查找pid,筛选出来
查看>>
每天一总结
查看>>
note 8 字符串
查看>>
thinkphp 3.2.3 连接sql server 2014
查看>>
求曲线上的动点到直线的距离的最值
查看>>
不等式证明中的断想
查看>>
用动态观点解决问题
查看>>
dingding
查看>>
[吴恩达机器学习笔记]15非监督学习异常检测7-8使用多元高斯分布进行异常检测...
查看>>