Netty核心概念(5)之Channel】的更多相关文章

1.前言 上一节讲了Netty的第一个关键启动类,启动类所做的一些操作,和服务端的channel固定的handler执行过程,谈到了不管是connect还是bind方法最终都是调用了channel的相关方法,此节开始对channel进行说明.channel设置的概念非常多,而且都很重要,先放个NIO的客户端Channel的类结构图. 2.主要概念 2.1 channel channel就是直接与操作系统层到交道的数据通道了,可能是java提供的,也可能是通过native方法自己扩展了C++功能的…
        在这一章我们将讨论Netty的10个核心类.清楚了解他们的结构对使用Netty非常实用.可能有一些不会再工作中用到.可是也有一些非经常常使用也非常核心,你会遇到. Bootstrap or ServerBootstrap EventLoop EventLoopGroup ChannelPipeline Channel Future or ChannelFuture ChannelInitializer ChannelHandler        本节的目的就是介绍以上这些概念.帮…
1.前言 之前的章节已经将启动demo中能看见的内容都分析完了,Netty的一个整体样貌都在第8节线程模型最后给的图画出来了.这些内容解释了Netty为什么是一个异步事件驱动的程序,也解释了Netty的线程模型的高效,但是并没有涉及到的一个方面就是Handler的解析过程.通过前面的知识点我们都应该明白了Handler用于对获取的数据按照相关协议进行解析,Java的NIO都是通过buffer完成的读写的,这里关于Netty的另一个高效性却没有涉及,那就是内存管理,这个阶段发生在handler读取…
1.前言 第7节初步学习了一下Java原本的线程池是如何工作的,以及Future的为什么能够达到其效果,这些知识对于理解本章有很大的帮助,不了解的可以先看上一节. Netty为什么会高效?回答就是良好的线程模型,和内存管理.在Java的NIO例子中就我将客户端的操作单独放在一个线程中处理了,这么做的原因在于如果将客户端连接串起来,后来的连接就要等前一个处理完,当然这并不意味着多线程比单线程有优势,而是在于每个客户端都需要进行读取准备好的缓存数据,再执行一些业务逻辑.如果业务逻辑耗时很久,那么顺序…
1.前言 本节介绍Netty中第三个重要的概念——Handler,这个在前两节都提到了,尤其是Channel和Handler联系紧密.handler本身的设计非常简单,但是所起到的作用却很大,Netty中对于handler的实现非常多(handler是控制socket io的各个生命周期的业务实现,netty实现了很多种协议,自然有很多handler类).本节并不关心各种不同功能的handler具体实现,主要讲解handler的设计和作用及使用方法. 2.主要概念 2.1 ChannelHand…
1.前言 本章本来要讲解Netty的线程模型的,但是由于其是基于Java线程池设计而封装的,所以我们先详细学习一下Java中的线程池的设计.之前也说过Netty5被放弃的原因之一就是forkjoin结构比较复杂,forkjoin也是JDK提供的一个基本线程模型,这里就不进行介绍.本节涉及知识点很多,可能有误,请对照JDK源码进行学习. 本章涉及的概念有Callable,Future,ExecutorService等,所有的类都在java.util.concurrent包下. 2.相关概念 2.1…
1.前言 第三节介绍了Netty的一些基本概念,此节介绍Netty的第一个概念Bootstrap——启动类.Netty中服务端和客户端的启动类是不一样的,这个不要搞错了,类都在bootstrap包下.之后的所有章节都是基于目前最新版本的Netty 4.1.24.Final版本. 2.结构详解 bootstrap中主要就两个内容:bootstrap和config.channelFactory被移动到其他地方了,这个接口已经废弃.乱入了一个FailedChannel,这里暂且不管. config给人…
一个Netty程序始于Bootstrap类,Bootstrap类是Netty提供的一个可以通过简单配置来设置或“引导”程序的一个重要的类.Netty中设计了Handlers来处理特定的"event"和设置Netty中的事件,从而来处理多个协议和数据.ChannelInboundHandler用来接收消息.Netty提供ChannelInitializer用来配置Handler, ChannelInitializer通过ChannelPipeline来添加ChannelHandler.C…
1.前言 第7节讲解JAVA的线程模型中就说到了Future,并解释了为什么可以主线程可以获得线程池任务的执行后结果,变成一种同步状态.秘密就在于Java将所有的runnable和callable任务,统一变成了callable,最终包装成了FutureTask对象,该类实现了Runnable接口和Future接口,所以FutureTask能够被线程执行.最终异步执行过程全部由该类控制逻辑,所以在get的时候锁住了该类,run方法执行的时候释放了锁,这样就满足了能够在异步线程执行完毕获取相关结果…
前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ? RabbiMQ的高性能之道是如何做到的? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架构模型是什么样子的? RabbitMQ消息是如何流转的? 1. 初识RabbitMQ RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据(RabbitMQ能够实现跨语言跨平台的机制,),RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ…