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

  • 相关阅读:
    《鸟哥的私房菜阅读摘要》——linux的简介和计算机基础
    抽象类可以有构造函数吗
    Java对象及对象引用变量
    html5的学习笔记
    xhtml的学习笔记
    交换机配置原理
    (转)MSI
    python xy
    Microsoft SilverLightt是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序。
    epub使用Adobe Digital Editions打开
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5631103.html
Copyright © 2011-2022 走看看