zoukankan      html  css  js  c++  java
  • tigase网络核心SockThread详解(十九)

    总述

    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绑定事件,即可收发

    学海无涯、何时是岸
  • 相关阅读:
    centos7 做rails 执行rails server 报错
    centos 7 安装 rvm 超时
    centos7 打造基于python语言Selenium2自动化开发环境
    RubyMine8 安装
    linux 下安装 RZ SZ命令 以及使用
    centos 7.2 安装mysql 修改 初始密码
    win10系统配置FTP
    Windows环境安装MySQL8.0.11
    IntelliJ IDEA 2017 上传本地项目至码云
    IntelliJ IDEA 2017.3 搭建一个多模块的springboot项目(三)
  • 原文地址:https://www.cnblogs.com/veblen/p/14703979.html
Copyright © 2011-2022 走看看