zoukankan      html  css  js  c++  java
  • Kakfa揭秘 Day5 SocketServer下的NIO

    Kakfa揭秘 Day5

    SocketServer下的NIO

    整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的优势,而socketServer就是其中的代表。

    今天会分析下socketServer,分析下其中三个核心对象 acceptor、processor、handler

    概述

    首先让我们看下socketServer的说明:
    Snip20160630_80

    这是一个采用Java NIO开发的socket Server,有一个acceptor线程去处理新的连接请求,一个acceptor会接收很多客户的连接请求,里面有N个processor提供并发度,每个processor依附一个线程,线程里有自己的selector,会读取NIO socket通讯的请求,交给handler处理,handler处理完成后把结果返回给客户端。

    从在构造方法,也可以看到,生成了一个acceptor和n个processor。
    Snip20160630_81

    Acceptor

    Acceptor 继承自AbstractServerThread,是个Runnable对象,在接收客户端请求后,会交给processor来进行处理。
    Snip20160630_82

    关键是run方法,如果有连接进来的话,会分配processor进行处理,分配算法用的是round robin的方式。

    Snip20160630_85

    Acceptor主要是会建立一个ServerSocketChannel,当select方法返回时,就表示注册的事件发生了。
    Snip20160630_86

    Processor

    processor的作用相当于一个路由器。
    Snip20160630_87

    在run时不断循环,读取客户端的数据,就是一个消息循环器的多线程编程,具体的操作是交给handler的。
    Snip20160630_88

    processor读取完数据之后,会封装为一个request对象,发送到queue中,

    Snip20160630_91

    如果queue满了的话,handler会从request queue获取数据,进行处理。
    Snip20160630_89

    欲知后事如何,且听下回分解!

    DT大数据每天晚上20:00YY频道现场授课频道68917580

  • 相关阅读:
    C#生成PDF总结
    Oracle删除当前用户下所有的表的方法
    C#操作oracle 到ExecuteNonQuery卡死不执行
    C#中事件的使用
    初探three.js光源
    d3.js 地铁轨道交通项目实战
    初探three.js
    d3.js 绘制北京市地铁线路状况图(部分)
    d3.js 共享交换平台demo
    d3.js 实现烟花鲜果
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5631103.html
Copyright © 2011-2022 走看看