- 博客(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
4635
转载 Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名
https://www.cnblogs.com/legendjslc/p/7204734.html
2018-08-24 16:34:36
1783
转载 自顶向下深入分析Netty(九)--ByteBuf源码分析
9.4 ByteBuf源码分析9.4.1 类图ByteBuf的子类实现非常多,其中关键的实现类如下:ByteBuf类图可以使用两种方式对ByteBuf进行分类:按底层实现方式和按是否使用对象池。按底层实现HeapByteBufHeapByteBuf的底层实现为JAVA堆内的字节数组。堆缓冲区与普通堆对象类似,位于JVM堆内存区,可由GC回
2017-06-16 17:16:45
622
转载 自顶向下深入分析Netty(九)--引用计数
在前文中介绍了ByteBuf的概念和使用,本文进一步讲解背后的引用计数特性。9.3 引用计数服务端的网络通讯应用在处理一个客户端的请求时,基本都需要创建一个缓冲区ByteBuf,直到将字节数据解码为POJO对象,该缓冲区才不再有用。由此可知,当面对大量客户端的并发请求时,如果能有效利用这些缓冲区而不是每次都创建,将大大提高服务端应用的性能。或许你会有疑问:既然已经有了JAVA的
2017-06-16 17:15:59
971
转载 自顶向下深入分析Netty(九)--ByteBuf
Netty架构模式在本节之前,该系列文章已经自顶向下分析了Netty的基本组件:EventLoop,Channel和ChannelHandler,而本节将分析最后一个组件:字节缓冲区ByteBuf,可认为是图中subReactor与read和send之间的部分。9.1 ByteBuf总述引入缓冲区是为了解决速度不匹配的问题,在网络通讯中,CPU处理数据的速度大大快于
2017-06-16 17:15:14
540
转载 自顶向下深入分析Netty(八)-- LengthFieldBasedFrameDecoder
(本文是上一节的节选,已读可略过)Netty中,基于长度字段的消息帧解码器LengthFieldBasedFrameDecoder可根据数据包中的长度字段动态的解码出消息帧。一个推荐的二进制传输协议可设计为如下格式: +----------+------+----------+------+ | 头部长度 | 头部 | 数据长度 | 数据 | +--------
2017-06-16 17:14:30
430
转载 自顶向下深入分析Netty(八)--CodecHandler
编解码处理器作为Netty编程时必备的ChannelHandler,每个应用都必不可少。Netty作为网络应用框架,在网络上的各个应用之间不断进行数据交互。而网络数据交换的基本单位是字节,所以需要将本应用的POJO对象编码为字节数据发送到其他应用,或者将收到的其他应用的字节数据解码为本应用可使用的POJO对象。这一部分,又和JAVA中的序列化和反序列化对应。幸运的是,有很多其他的开源工具(prot
2017-06-16 17:09:35
418
转载 自顶向下深入分析Netty(八)--ChannelHandler
8.1 总述由第七节的讲述可知ChannelHandler并不处理事件,而由其子类代为处理:ChannelInboundHandler拦截和处理入站事件,ChannelOutboundHandler拦截和处理出站事件。ChannelHandler和ChannelHandlerContext通过组合或继承的方式关联到一起成对使用。事件通过ChannelHandlerContext主动调用如f
2017-06-16 17:08:23
3995
转载 自顶向下深入分析Netty(七)--ChannelHandlerContext源码实现
7.2.2 ChannelHandlerContext7.2.2.1 AbstractChannelHandlerContextAbstractChannelHandlerContext的类签名如下: abstract class AbstractChannelHandlerContext extends DefaultAttributeMap
2017-06-16 17:07:25
2673
转载 自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述
Netty架构模式像以往一样,继续回顾这幅图。目前为止,我们学习了Netty的EventLoop、Channel以及ChannelFuture,还差最后两个部分:ByteBuf和ChannelHandler。ByteBuf作为通道读写数据的缓冲区,Channel底层数据的读写细节正是由ByteBuf完成。ChannelHandler作为处理各种事件的处理器,为用户提供实际的业务逻辑处理
2017-06-16 17:06:35
530
转载 自顶向下深入分析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
505
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
1092
转载 自顶向下深入分析Netty(六)--Channel总述
Netty架构模式回顾这幅图,目前为止,我们明白了两个Reactor、acceptor以及异步结果的原理。在这一章中,我们将分析图中的箭头部分,将各部件连接起来。进行连接的关键部件正是本章的主角Channel,Channel是网络Socket进行联系的纽带,可以完成诸如读、写、连接、绑定等I/O操作。6.1 总述6.1.1 ChannelJDK中的Channel
2017-06-16 17:02:30
1529
转载 自顶向下深入分析Netty(五)--Future
Netty架构模式再次回顾这幅图,在上一章中,我们分析了Reactor的完整实现。由于Java NIO事件驱动的模型,要求Netty的事件处理采用异步的方式,异步处理则需要表示异步操作的结果。Future正是用来表示异步操作结果的对象,Future的类签名为: public interface FutureV>;其中的泛型参数V即表示异步结果的类型。5.1 总
2017-06-16 17:01:47
2461
1
转载 自顶向下深入分析Netty(四)--优雅退出机制
4.5 Netty优雅退出机制你也许已经习惯了使用下面的代码,使一个线程池退出: bossGroup.shutdownGracefully();那么它是如何工作的呢?由于bossGroup是一个线程池,线程池的关闭要求其中的每一个线程关闭。而线程的实现是在SingleThreadEventExecutor类,所以我们将再次回到这个类,首先看其中的shutdownGrace
2017-06-16 16:37:00
3326
转载 自顶向下深入分析Netty(四)--EventLoop-2
4.4 线程4.4.1 AbstractExecutorServiceAbstractExecutorService是JDK并发包中的类,实现了ExecutorService中的submit()和invoke*()方法,关键实现是其中的newTaskFor()方法,使用FutureTask包装一个Ruannble对象和结果或者一个Callable对象。注意,这个方法是一个prote
2017-06-16 16:35:23
711
转载 自顶向下深入分析Netty(四)--EventLoop-1
netty线程模型我们再次回顾这幅图,通过先前的讲解,现在是不是亲切很多了。图中绿色的acceptor应该是你最熟悉的部分,之前我们在ServerBootstrap中进行了详细分析。我们知道了mainReactor是一个线程池,处理Accept事件负责接受客户端的连接;subReactor也是一个线程池,处理Read(读取客户端通道上的数据)、Write(将数据写入到客户端通道上)等事
2017-06-16 16:34:31
935
转载 自顶向下深入分析Netty(三)--Bootstrap源码分析
长文预警,本文为源码分析部分,夹杂大量源码可能会引起不适,请选择性阅读。如果你只想知道Bootstrap的使用,可以阅读前一篇文章:自顶向下深入分析Netty(三)--Bootstrap2.源码分析Bootstrap类图首先看Bootstrap类图,可见类图比较简单。在分析时也使用自顶向下的方法,首先分析顶层的AbstractBootstrap,然后分析其子类B
2017-06-16 16:33:12
709
转载 自顶向下深入分析Netty(三)--Bootstrap
Netty的一种线程模型本文开始分析Netty的源码,由于目标是自顶向下分析,在这一节将分析Netty是如何构建起如上图所示的整体框架。首先将使用一个示例展示怎么使用Bootstarp构建服务端应用,然后将深入源码了解底层机制和原理。1.使用示例首先使用Netty构造如图所示的框架,源码如下: // 指定mainReactor EventLoopG
2017-06-16 16:28:46
1187
转载 自顶向下深入分析Netty(二)--线程模型
netty线程模型上面这幅图描述了netty的线程模型,其中mainReacotor,subReactor,Thread Pool是三个线程池。mainReactor负责处理客户端的连接请求,并将accept的连接注册到subReactor的其中一个线程上;subReactor负责处理客户端通道上的数据读写;Thread Pool是具体的业务逻辑线程池,处理具体业务。2.1 R
2017-06-16 16:27:44
977
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
1216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人