自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lz710117239的博客

java程序员的博客

  • 博客(25)
  • 收藏
  • 关注

转载 netty(十六)源码分析之服务端创建

netty为了向使用者用户屏蔽NIO通信的底层细节,在和用户交互的边界做了封装,目的就是减少用户开发工作量降低开发难度。ServerBootstrap是Socket服务端的启动辅助类,用户通过ServerBootstrap可以方便地创建Netty的服务端。时序图如下:下面我们对Netty服务端创建的关键步骤和原理进行讲解。步骤1:创建ServerBootstrap实例。Server

2017-08-31 22:26:33 531

转载 netty(十五)源码分析之ChannnelPipeline

Netty的Channel过滤器实现原理余ServletFilter机制一致,它将Channnel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递。ChannelPipeline持有I/O事件拦截器ChannelHandler的链表,由ChannelHandler对I/O事件进行拦截和处理,可以方便地通过新增和删除CHannelHandler来实现不

2017-08-30 19:59:20 437

转载 netty(十四)源码分析之Unsafe

Unsafe接口实际上是Channel接口的辅助接口,它不应该被用户代码直接调用。实际的I/O读写操作都是由Unsafe接口负责完成的。Unsafe源码分析实际的网络I/O操作基本都是由Unsafe功能类负责实现的,我们看下它的主要功能子类和重要的API实现。AbstractUnsafe源码分析(AbstractUnsafe是AbstractChannel的内部类)1.regi

2017-08-30 11:16:15 429

转载 netty(十三)源码分析之Channel

类似于NIO的Channel,Netty提供了自己的Channel和其子类实现,用于异步I/O操作和其他相关的操作。Unsafe是个内部接口,聚合在Channel中协助进行网络读写相关的操作,因为它的设计初衷就是Channel的内部辅助类,不应该被Netty框架的上层使用者调用,所以被命名为Unsafe。这里不能仅从字面理解认为它是不安全的操作,而要从这个架构的设计层面体会它的设计初衷和职责。

2017-08-29 20:02:21 1662

转载 netty(十二)源码分析之ByteBuf 四

PooledDirectByteBuf基于内存池实现,与UnPooledDirectByteBuf的唯一不同就是缓冲区的分配与销毁策略不同,其他功能都是等同的,也就是说,两者唯一的不同就是内存分配策略不同。1.创建字节缓冲区实例由于采用内存池实现,所以新创建PooledDerectByteBuf对象时不能直接new一个实例,而是从内存池中获取,然后设置引用计数器的值, stati

2017-08-28 16:41:16 289

转载 netty(十一)源码分析之ByteBuf 三

4.操作索引与索引相关的操作主要涉及设置读写索引、mark和rest等。我们看下ByteBuf的markReaderIndex()方法:public ByteBuf markReaderIndex() { markedReaderIndex = readerIndex; return this; }5.重用缓冲区前面介绍功能的时候已经简单讲解

2017-08-28 14:10:14 469

原创 dubbo持续检查超时时间线程DefaultFuture

这个类有个静态块,就是创建并运行了线程,里面有个参数RemotingInvocationTimeoutScan(),这个类就是一直轮询,查看哪个Future超时了。 static { Thread th = new Thread(new RemotingInvocationTimeoutScan(), "DubboResponseTimeoutScanTimer");

2017-08-24 15:31:22 3532

转载 netty(十一)源码分析之ByteBuf 二

3.readerIndex和writerIndexNetty提供了两个指针变量用于支持顺序读取和写入操作:readerIndex用于标识读取索引,writerIndex用于标识写入索引。两个位置指针将ByteBuf缓冲区分割成三个区域,如下图所示:调用ByteBuf的read操作时,从readerIndex处开始读取。readerIndex到writerIndex之间的空间为可读的字节缓冲

2017-08-23 20:05:37 690

转载 netty(十)源码分析之ByteBuf

通过对netty的API的学习,可以更加游刃有余的使用netty的相关类库对源码的学习不仅能够从源码层面掌握netty框架,方便日后的维护,拓展和定制而且可以起到触类旁通的作用,拓展读者的知识面,提升编程技能。当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK提供的java.nio.Buffer,它的实现类如下所示:实际上7中数据类型(Boolean除外)都有自己的

2017-08-23 11:14:19 467

转载 netty(九)源码分析之Future和Promise

相关代码如下所示:

2017-08-22 20:28:03 402

转载 netty(八)源码分析之eventLoop和eventLoopGroup

在此之前读者要了解下Netty的线程模型——Reactor线程模型。Reactor单线程模型作为NIO服务端,接收客户端的TCP连接作为NIO客户端,向服务端发起TCP连接读取通信对端的请求或者应答消息向通信对端发送消息请求或者应答消息Reactor单线程模型如下图所示:由于Reactor模式使用的是异步非阻塞I/O,所有的I/O操作都不会导致阻塞,理论上一个线程可以独

2017-08-22 00:30:44 1698 1

转载 netty(七)netty入门应用

从Netty官网http://netty.io,从Downloads标签页选择下载5.0.0.Alphal安装包,通过解压工具打开压缩包,如下图所示,由于我们直接以二进制库的方式使用Netty,所以只需要获取netty-all-5.0.0.Alphal.jar即可。将netty的jar包引入到项目中,如果是maven项目,直接配置pom文件也可以。我们仍然以时间服务器为例进行代码编

2017-08-21 20:57:52 397

原创 ueditro的使用详解,亲自过坑

一.首先去官网下载ueditor的资源文件夹。导入到自己的项目中的webapp的WEB-INF的某个文件夹下面。它的下面有个controller.jsp文件,里面有java代码执行,我们如果要上传图片,文件,视频就必须要执行此文件。里面代码如下...

2017-08-17 20:06:12 1563

转载 netty(六) 为什么选择netty

新浪有一篇博客,写的特别好,就是netty为什么优于NIO和AIO,地址如下:http://blog.sina.com.cn/s/blog_4c8c58ce0102vkbo.html接下来我们看看netty权威指南的作者为什么推荐netty而不是NIO和AIO:

2017-08-15 14:03:12 2125

转载 AIO编程

NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供以下两种方式获取操作结果。通过java.util.concurrent.Future类来表示异步操作的结果;在异步操作的时候传入一个java.nio.channels;CompletionHandler接口的实现类作为操作完成的回调。NIO2.0的异步套接字通道是真正的异步非阻塞I/O

2017-08-14 22:17:13 375

原创 AIO中的AsynchronousServerSocketChannel.accept源码分析

在AIO中,服务端通过asynchronousServerSocketChannel.accept(this,newAcceptCompletionHandler());的方式接收客户端的连接,那它是怎么做的呢,我们做下源码分析。这个accept方法进入了实现类AsynchronousServerSocketChannelImpl的accept方法,如下: pub

2017-08-12 23:47:57 3061

转载 netty(五) NIO创建的TimerServer源码分析之客户端

NIO客户端创建序列图如下:步骤一:打开SocketChannel,绑定客户端本地地址(可选,默认系统会随机分配一个可用的本地地址),示例代码如下。

2017-08-11 00:13:05 375

转载 netty(四) NIO创建的TimerServer源码分析之服务端

NIO创建的TimeServer源码分析我们将在TimeServer历程中给出完整的NIO创建的时间服务器源码。public class TimerServer { public static void main(String[] args) throws IOException { int port = 8080; if (args != null &

2017-08-10 21:02:34 439

原创 tomcat8关键性源码分析

tomcat8的连接配置如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="100" prestartminSpareThreads = "true" ma

2017-08-10 13:58:53 331

原创 servChannel.register()源码分析

servChannel.register(selector, SelectionKey.OP_ACCEPT);方法是进入了SelectableChannel的register方法,如下: public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException

2017-08-10 13:43:36 303

转载 java原子更新器AtomicReferenceFieldUpdater的使用

AtomicReferenceFieldUpdater    一个基于反射的工具类,它能对指定类的指定的volatile引用字段进行原子更新。(注意这个字段不能是private的)通过调用AtomicReferenceFieldUpdater的静态方法newUpdater就能创建它的实例,该方法要接收三个参数:    包含该字段的对象的类    将被更新的对象的类    将

2017-08-09 10:22:30 1854

转载 netty(三) NIO编程

与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模式。阻塞模式使用非常简单,但是性能和可靠性都不好,非阻塞模式正好相反。开发人员可以根据需要选择合适的模式。一般来说,低负载,低并发的应用程序可以选择同步阻塞I/O降低编程复杂度;对于高负载、高并发的应用

2017-08-08 22:09:00 276

转载 netty(二) 伪异步I/O编程

为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化——后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,由于M可以远远大于N。通过线程池可以灵活地调配线程资源,设置线程的最大值,防止由于海量并发接入导致线程耗尽。下面,结合连接模型图和源码,对伪异步IO进行分析,看它是否能够解决同步阻塞IO面临的问题。伪异

2017-08-05 23:45:03 446

原创 dubbo源码解析,关于cache缓存日志

在dubbo中,会有cache缓存文件,这样消费端就可以直接调用服务端,那么这个缓存文件是怎么生成的呢,我们看下源码分析。首先在dorefer方法中,会进行发布订阅,就是标蓝那行,然后在发布订阅方法中,有个notify()方法,此方法最后进入了,AbstractRegistry的notify方法,如下:我们直接看关键性代码:dubbo就是在这个savePropert

2017-08-03 21:55:38 1867

转载 netty(一) java NIO

关于java,其网络通信方面性能可以说在慢慢挖掘,而且是现今被挖掘出来有效率最高的一块了,不止2017年,最近这两年开始,你会发现,java很多组件都采用了NIO的方式,因为其性能确实可以带来很大提高,从阿里dubbo的广泛应用netty,到tomcat8以后的NIO通讯,作为一个老程序员,我们发现一定要深入研究java的NIO了,它现在成了java各种应用级开发的核心功能。在jdk1.4之前

2017-08-02 22:33:20 432

空空如也

空空如也

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

TA关注的人

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