自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

转载 Nginx开启SSL模块

Starting nginx: nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:112说是没有安装OpenSSL,但是我whereis openssl 发现是有的。直接输入OpenSSL也是有的。所以断定肯定不是因为没有下载。然后可能就是再,安装Nginx的时候,,没有配置ssl环境。所以...

2018-10-30 10:46:35 4579

转载 Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名

https://www.cnblogs.com/legendjslc/p/7204734.html

2018-08-24 16:34:36 1732

转载 自顶向下深入分析Netty(九)--ByteBuf源码分析

9.4 ByteBuf源码分析9.4.1 类图ByteBuf的子类实现非常多,其中关键的实现类如下:ByteBuf类图可以使用两种方式对ByteBuf进行分类:按底层实现方式和按是否使用对象池。按底层实现HeapByteBufHeapByteBuf的底层实现为JAVA堆内的字节数组。堆缓冲区与普通堆对象类似,位于JVM堆内存区,可由GC回

2017-06-16 17:16:45 572

转载 自顶向下深入分析Netty(九)--引用计数

在前文中介绍了ByteBuf的概念和使用,本文进一步讲解背后的引用计数特性。9.3 引用计数服务端的网络通讯应用在处理一个客户端的请求时,基本都需要创建一个缓冲区ByteBuf,直到将字节数据解码为POJO对象,该缓冲区才不再有用。由此可知,当面对大量客户端的并发请求时,如果能有效利用这些缓冲区而不是每次都创建,将大大提高服务端应用的性能。或许你会有疑问:既然已经有了JAVA的

2017-06-16 17:15:59 929

转载 自顶向下深入分析Netty(九)--ByteBuf

Netty架构模式在本节之前,该系列文章已经自顶向下分析了Netty的基本组件:EventLoop,Channel和ChannelHandler,而本节将分析最后一个组件:字节缓冲区ByteBuf,可认为是图中subReactor与read和send之间的部分。9.1 ByteBuf总述引入缓冲区是为了解决速度不匹配的问题,在网络通讯中,CPU处理数据的速度大大快于

2017-06-16 17:15:14 506

转载 自顶向下深入分析Netty(八)-- LengthFieldBasedFrameDecoder

(本文是上一节的节选,已读可略过)Netty中,基于长度字段的消息帧解码器LengthFieldBasedFrameDecoder可根据数据包中的长度字段动态的解码出消息帧。一个推荐的二进制传输协议可设计为如下格式: +----------+------+----------+------+ | 头部长度 | 头部 | 数据长度 | 数据 | +--------

2017-06-16 17:14:30 380

转载 自顶向下深入分析Netty(八)--CodecHandler

编解码处理器作为Netty编程时必备的ChannelHandler,每个应用都必不可少。Netty作为网络应用框架,在网络上的各个应用之间不断进行数据交互。而网络数据交换的基本单位是字节,所以需要将本应用的POJO对象编码为字节数据发送到其他应用,或者将收到的其他应用的字节数据解码为本应用可使用的POJO对象。这一部分,又和JAVA中的序列化和反序列化对应。幸运的是,有很多其他的开源工具(prot

2017-06-16 17:09:35 367

转载 自顶向下深入分析Netty(八)--ChannelHandler

8.1 总述由第七节的讲述可知ChannelHandler并不处理事件,而由其子类代为处理:ChannelInboundHandler拦截和处理入站事件,ChannelOutboundHandler拦截和处理出站事件。ChannelHandler和ChannelHandlerContext通过组合或继承的方式关联到一起成对使用。事件通过ChannelHandlerContext主动调用如f

2017-06-16 17:08:23 3934

转载 自顶向下深入分析Netty(七)--ChannelHandlerContext源码实现

7.2.2 ChannelHandlerContext7.2.2.1 AbstractChannelHandlerContextAbstractChannelHandlerContext的类签名如下: abstract class AbstractChannelHandlerContext extends DefaultAttributeMap

2017-06-16 17:07:25 2627

转载 自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述

Netty架构模式像以往一样,继续回顾这幅图。目前为止,我们学习了Netty的EventLoop、Channel以及ChannelFuture,还差最后两个部分:ByteBuf和ChannelHandler。ByteBuf作为通道读写数据的缓冲区,Channel底层数据的读写细节正是由ByteBuf完成。ChannelHandler作为处理各种事件的处理器,为用户提供实际的业务逻辑处理

2017-06-16 17:06:35 492

转载 自顶向下深入分析Netty(七)--ChannelPipeline源码实现

7.2 源码分析7.2.1 ChannelPipeline首先看ChannelPipeline接口的关键方法,相似方法只列出一个: ChannelPipeline addLast(String name, ChannelHandler handler); ChannelPipeline remove(ChannelHandler handler); Cha

2017-06-16 17:05:28 455 1

转载 自顶向下深入分析Netty(六)--Channel源码实现

6.2 Channel实现Netty_Channel类图Channel的类图比较清晰。我们主要分析NioSocketChannel和NioServerSocketChannel这两条线。6.2.1 AbstractChannel首先看其中的字段: private final Channel parent; // 父Channel p

2017-06-16 17:04:23 1044

转载 自顶向下深入分析Netty(六)--Channel总述

Netty架构模式回顾这幅图,目前为止,我们明白了两个Reactor、acceptor以及异步结果的原理。在这一章中,我们将分析图中的箭头部分,将各部件连接起来。进行连接的关键部件正是本章的主角Channel,Channel是网络Socket进行联系的纽带,可以完成诸如读、写、连接、绑定等I/O操作。6.1 总述6.1.1 ChannelJDK中的Channel

2017-06-16 17:02:30 1458

转载 自顶向下深入分析Netty(五)--Future

Netty架构模式再次回顾这幅图,在上一章中,我们分析了Reactor的完整实现。由于Java NIO事件驱动的模型,要求Netty的事件处理采用异步的方式,异步处理则需要表示异步操作的结果。Future正是用来表示异步操作结果的对象,Future的类签名为: public interface FutureV>;其中的泛型参数V即表示异步结果的类型。5.1 总

2017-06-16 17:01:47 2390 1

转载 自顶向下深入分析Netty(四)--优雅退出机制

4.5 Netty优雅退出机制你也许已经习惯了使用下面的代码,使一个线程池退出: bossGroup.shutdownGracefully();那么它是如何工作的呢?由于bossGroup是一个线程池,线程池的关闭要求其中的每一个线程关闭。而线程的实现是在SingleThreadEventExecutor类,所以我们将再次回到这个类,首先看其中的shutdownGrace

2017-06-16 16:37:00 3241

转载 自顶向下深入分析Netty(四)--EventLoop-2

4.4 线程4.4.1 AbstractExecutorServiceAbstractExecutorService是JDK并发包中的类,实现了ExecutorService中的submit()和invoke*()方法,关键实现是其中的newTaskFor()方法,使用FutureTask包装一个Ruannble对象和结果或者一个Callable对象。注意,这个方法是一个prote

2017-06-16 16:35:23 665

转载 自顶向下深入分析Netty(四)--EventLoop-1

netty线程模型我们再次回顾这幅图,通过先前的讲解,现在是不是亲切很多了。图中绿色的acceptor应该是你最熟悉的部分,之前我们在ServerBootstrap中进行了详细分析。我们知道了mainReactor是一个线程池,处理Accept事件负责接受客户端的连接;subReactor也是一个线程池,处理Read(读取客户端通道上的数据)、Write(将数据写入到客户端通道上)等事

2017-06-16 16:34:31 890

转载 自顶向下深入分析Netty(三)--Bootstrap源码分析

长文预警,本文为源码分析部分,夹杂大量源码可能会引起不适,请选择性阅读。如果你只想知道Bootstrap的使用,可以阅读前一篇文章:自顶向下深入分析Netty(三)--Bootstrap2.源码分析Bootstrap类图首先看Bootstrap类图,可见类图比较简单。在分析时也使用自顶向下的方法,首先分析顶层的AbstractBootstrap,然后分析其子类B

2017-06-16 16:33:12 660

转载 自顶向下深入分析Netty(三)--Bootstrap

Netty的一种线程模型本文开始分析Netty的源码,由于目标是自顶向下分析,在这一节将分析Netty是如何构建起如上图所示的整体框架。首先将使用一个示例展示怎么使用Bootstarp构建服务端应用,然后将深入源码了解底层机制和原理。1.使用示例首先使用Netty构造如图所示的框架,源码如下: // 指定mainReactor EventLoopG

2017-06-16 16:28:46 1140

转载 自顶向下深入分析Netty(二)--线程模型

netty线程模型上面这幅图描述了netty的线程模型,其中mainReacotor,subReactor,Thread Pool是三个线程池。mainReactor负责处理客户端的连接请求,并将accept的连接注册到subReactor的其中一个线程上;subReactor负责处理客户端通道上的数据读写;Thread Pool是具体的业务逻辑线程池,处理具体业务。2.1 R

2017-06-16 16:27:44 915 1

转载 自顶向下深入分析Netty(一)--预备知识

netty是基于Java NIO封装的网络通讯框架,只有充分理解了Java NIO才能理解好netty的底层设计。Java NIO有几个重要的概念Channel,Buffer,Selector。NIO是基于Channel和Buffer操作的,数据只能通过Buffer写入到Channel或者从Channel读出数据到Buffer中。Selector可以监听多个通道的事件(连接打开,数据到达),这样便

2017-06-16 16:17:52 1168

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除