
开源组件
文章平均质量分 93
等风来啊
好久没有更新博客了,兄弟们我回来,后续每周定时为大家分享大数据技术
10年磨一剑,每天进步一点点
展开
-
Netty使用初步
1、简介Java1.4提供了NIO使开发者可以使用Java编写高性能的服务端程序,但使用原生的NIO API就像Linux C中网络编程一样,还是需要做IO处理、协议处理等低层次工作。所以,就像C服务端程序大量使用libevent作为网络应用框架一样,Java社区也不断涌现出基于NIO的网络应用框架。在这其中,Jboss出品的Netty就是个中翘楚。Netty是个异步的事件驱动网络应用框架转载 2014-05-05 00:52:52 · 546 阅读 · 0 评论 -
ChannelConfig
今天我来来看一下整个ChannelConfig的类的继承层次: 整个类结构来说还是比较好理解的,我就将作者的意图分析一下: 整个ChannelConfig的类的继承层次我感觉是非常明了的:首先在顶层的ChannelConfig,这个里面定义一个Channel可以设置的基本参数,一堆的options,还有相应的bufferFact转载 2014-06-04 01:36:27 · 1856 阅读 · 0 评论 -
Netty Server端代码简略分析
Netty Server端代码简单分析Netty源码简单分析:Netty整体架构清晰的分为两部分:1. ChannelFactory:主要负责生产网络通信相关的Channel和ChannelSink实例,NIO Server端一般使用NioServerSocketChannelFactory,用户也可以定制自己的ChannelFactory。2. ChannelPipelineFa转载 2014-05-05 00:41:52 · 661 阅读 · 0 评论 -
netty源码分析小结
先看下netty的channel对象关联关系。channel是由channelfactory来创建的,channelfactory又分为client和server两种。channelfuture负责channel的所处状态,一个channle中关联来channelpipeline,channelpipeline则由pipelinefactory创建,在channelpipeline中有内部转载 2014-05-05 00:16:24 · 888 阅读 · 0 评论 -
理解Java NIO
基础概念缓冲区操作 缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读)。如下图内核空间、用户空间 上图简单描述了数据从磁盘到用户进程的内存区域移动的过程,其间涉及到了内核空间与用户空间。这两个空间有什么区别呢? 用户空间就是常规进程(如JVM)所在区域,用户空间是非特权区域,如不能直接转载 2014-04-23 00:05:45 · 628 阅读 · 0 评论 -
Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)
OneCoder这个周末搬家,并且新家目前还没有网络,本周的翻译的任务尚未完成,下周一起补上,先上一篇OIO和NIO对比的小研究。Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。?转载 2014-03-27 01:30:48 · 854 阅读 · 0 评论 -
Java NIO框架Netty教程(十三)-并发访问测试(下)
在上节(《Java NIO框架Netty教程(十二)-并发访问测试(中)》),我们从各个角度对Netty并发的场景进行了测试。这节,我们将重点关注上节最后提到的问题。在多线程并发访问的情况下,会出现警告: EXCEPTION, please implement one.coder.netty.chapter.eight.ObjectClientHandler.exceptionCaught转载 2014-03-27 01:21:14 · 1587 阅读 · 0 评论 -
Java NIO框架Netty教程(十)-Object对象的连续收发解析分析
如果您一直关注OneCoder,我们之前有两篇文章介绍关于Netty消息连续收发的问题。( 《Java NIO框架Netty教程(五)- 消息收发次数不匹配的问题 》、《 Java NIO框架Netty教程(七)-再谈收发信息次数问题 》)。如果您经常的“怀疑”和思考,我们刚介绍过了Object的传递,您是否好奇,在Object传递中是否会有这样的问题?如果Object流的字节截断错乱,那肯定转载 2014-03-27 00:14:28 · 851 阅读 · 0 评论 -
netty3.2.3源码分析--服务器端发送数据分析
上一篇分析了服务器端读取客户发送的数据,这篇来看服务器端如何发送数据给客户端,服务器往外发送数据是通过downstreamhandler从下到上执行发送从ChannelFuture future = e.getChannel().write(response)开始执行Channels下的public static ChannelFuture write(Channel channel,转载 2014-05-07 00:15:42 · 756 阅读 · 0 评论 -
Netty源码学习-ServerBootstrap启动及事件处理过程
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式: http://bylijinnan.iteye.com/blog/1992325 Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的 文章里面提到的操作,每一步都能在Netty里面找到对应的代码 其中Reactor里面的Acceptor就对应Netty的Server转载 2014-05-07 00:27:05 · 938 阅读 · 0 评论 -
java nio&netty系列之二reactor模型基础
上一篇章介绍了下NIO的基础,并且也给出了一个简单的代码示例,但是如果想享受NIO带来的高速的快感,就得使用多线程编程了。那么在使用多线程编程之前,有一些关于多线程的东西想分享下:一、关于多线程分享点一:在单核CPU上,多线程不一定能比单线程更好。为什么要使用多线程?很多人也许未必去考虑过,我个人认为,使用多线程是为了减少CPU等待的时间,最大化的利用CPU的性能。那为什么说多线程转载 2014-05-07 01:07:38 · 1692 阅读 · 0 评论 -
关于 Java 中 finally 语句块的深度辨析
可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机。接下来我就带您一步一步的揭开这个 finally 的神秘面纱。问题分析首先来问大家一个问题:finally 语句块一定会执行吗?很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员。可惜并不像大多人所认为的那样,对于这个问题,答案当然是否定的,我们先来看下转载 2014-05-23 00:12:32 · 680 阅读 · 0 评论 -
netty学习之ChannelEvent
netty里面ChannelEvent是非常重要的一个概念,在这个里面我们来重点分析一下。 ChannelEvent应该是netty里面比较重要的概念了,这个是在ChannelPipeline的ChannelHandlers里面传递的对象。event分为两种,一种是upstream event,另外一种是downstream even转载 2014-06-04 01:38:33 · 945 阅读 · 0 评论 -
netty源码分析系列文章
想在年终之际将对netty研究的笔记记录下来,先看netty3,然后有时间了再写netty4的,希望对大家有所帮助,这个是一个博客的目录页面,未完待续,希望在大家的鼓励下将这个框架的细节、注意事项、代码技巧等都记录下来。 netty源码分析之ChannelBuffernetty源码分析之Channel接口netty源码分析之ServerChannel转载 2014-06-04 01:53:25 · 721 阅读 · 0 评论 -
netty3.2.3源码分析-ClientBootstrap启动分析
在看完了server端的启动,再来看client端的启动过程是怎么进行的。例子是TelentServer对应的TelentClientpublic class TelnetClient { public static void main(String[] args) throws Exception { ClientBootstrap b转载 2014-05-05 00:14:48 · 761 阅读 · 0 评论 -
netty3.2.3源码分析--ServerBootstrap启动分析
这里首先分析下ServerBootstrap的启动过程,在netty中,channel可以看成是socketchannel的抽象channelpipeline里存放着channelhandler,channelpipeline根据不同的channelevent触发对应的操作如channel的open,bind,connect等下面以TelnetServer为例来一步步看server启动转载 2014-05-05 00:04:08 · 643 阅读 · 0 评论 -
Netty 4 源码分析——结构概览
看了两天的netty源码,现在总算有了些眉目了。下面是用excel画的一个简单的结构图 Channel是对最终I/O处理的封装EventExecutor 封装了负责处理I/O 事件的线程ChannelHandler 处理相关I/O Event的扩展接口,分为ChannelInboundHandler和[*]ChannelOutboundHandler,分别处理不同流向的事件Cha转载 2014-04-01 00:30:35 · 1022 阅读 · 0 评论 -
Java NIO框架Netty教程(十一)-并发访问测试(上)
之前更新了几篇关于JVM研究的文章,其实也是在做本篇文章验证的时候,跑的有点远,呵呵。回归Netty教程,这次要讲的其实是针对一个问题的研究和验证结论。另外,最近工作比较忙,所以可能会分文章更新一些阶段性的成果,而不是全部汇总更新,以免间隔过久。起因是一个朋友,通过微博(OneCoder腾讯微博、OneCoder新浪微博、OneCoder网易微博、OneCoder搜狐微博)私信给我一个问题转载 2014-03-27 00:41:41 · 1551 阅读 · 0 评论 -
Netty Channel 接口名词理解
1.Channel channel 是负责数据读,写的对象,有点类似于老的io里面的stream。它和stream的区别,channel是双向的,既可以write 也可以read,而stream要分outstream和inputstream。而且在NIO中用户不应该直接从channel中读写数据,而是应该通过buffer,通过buffer再将数据读写到channel中。 一个channel转载 2014-06-04 01:20:05 · 974 阅读 · 0 评论 -
netty学习之Channel接口
正如javadoc所说的,一个channel给用户提供下面四个服务:1. 当前channel的状态,是open还是connected2. 这个channel的一些配置信息3. 这个channel所支持的一些io操作4. 和这个channel相关联的ChannelPipelineChannel中所有的操作都是异步的,当发生io操作的时候将会返回一个ChannelFutrue的转载 2014-06-04 01:07:54 · 1355 阅读 · 0 评论 -
Java NIO系列教程(六) Selector
原文链接 作者:Jakob Jenkov 译者:浪迹v 校对:丁一Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道Select转载 2014-04-23 00:28:19 · 506 阅读 · 0 评论 -
Netty 深入了解源代码分析
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.整套channel的实现,4.基于事件的过程流转以及完整的网络事件响应与扩展,5.丰富的example。本文并不对Netty实际使用中可能出现的问题做分析,只是从转载 2014-04-01 01:15:45 · 925 阅读 · 0 评论 -
透过JVM看Exception本质
引子 异常能不能作为控制流,这个争论其实已经存在了很长时间,最近gdpglc同学发的一连四张《验证String是不是整数,用异常作判断怎么了!》的帖子(前三张已经被投为隐藏帖,要看的话可以从第四张进去)令这个争端又一次成为JE主版的话题。 gdpglc同学的语气比较激烈,但发表自己观点是值得肯定的,何况异常可以作为控制流的观点,JavaEye创始人肉饼同转载 2014-05-22 23:49:13 · 1026 阅读 · 0 评论 -
Java NIO系列教程(九) ServerSocketChannel
原文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:01转载 2014-04-23 00:27:06 · 491 阅读 · 0 评论 -
Java NIO系列教程(十) Java NIO DatagramChannel
原文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:转载 2014-04-23 00:26:29 · 508 阅读 · 0 评论 -
Netty实现原理浅析
Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面的内容有错误或不严谨的地方,也请指正和谅解。对于Netty使用者来说,Netty提供了几个典型的example,并有详尽的API doc和guide doc,本文的一些内容及图示也来转载 2014-05-05 00:53:40 · 550 阅读 · 0 评论 -
Netty服务器线程模型概览
目录[-]一切从ServerBootstrap开始boss线程和worker线程worker线程的生命周期(life circle)减少worker线程的处理占用时间利用netty框架自带的ExecutionHandler一切从ServerBootstrap开始ServerBootstrap 负责初始话netty服务器,并且开始监听端口的sock转载 2014-05-07 00:38:03 · 683 阅读 · 0 评论 -
Netty源码学习-Java-NIO-Reactor
Netty里面采用了NIO-based Reactor Pattern 了解这个模式对学习Netty非常有帮助 参考以下两篇文章: http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf转载 2014-05-05 00:27:17 · 695 阅读 · 2 评论 -
Netty源码学习-Java-NIO-Reactor
Netty里面采用了NIO-based Reactor Pattern 了解这个模式对学习Netty非常有帮助 参考以下两篇文章: http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf转载 2014-05-07 00:31:24 · 568 阅读 · 0 评论 -
netty学习之ServerChannel
首先我们先来看serverchannel的类继承层次,然后再一个一个的研究。 现在我们来挨个的介绍各个类。 AbstractChannel应该是整个Channel子类的父类,这个里面有一个static的变量allChannels,这个里面放着所有的channel,现在还不能体会放这个得好处。里面感觉没有什么特殊的,allocateId这个方法应该是给c转载 2014-06-04 01:33:34 · 1009 阅读 · 0 评论 -
netty学习之ChannelSink(NioClientSocketPipelineSink)
这个东西应该是netty里面最难理解的,或者最关键的组件了,这个我会慢慢的进行分析。在Pipeline传送完后,都必须都通ChannelSink进行处理。Sink默认处理了琐碎的操作,例如连接、读写等等。 ChannelSink这个组件是来处理downstream请求和产生upstream时间的一个组件,是所有io操作的执行者。也就是传输的逻辑层吧。当channel创建的时转载 2014-06-04 01:40:40 · 1280 阅读 · 0 评论 -
Java NIO系列教程(十一) Pipe
原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:转载 2014-04-23 00:24:32 · 472 阅读 · 0 评论 -
Java NIO系列教程(六) Selector
原文链接 作者:Jakob Jenkov 译者:浪迹v 校对:丁一Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道Select转载 2014-04-23 00:22:13 · 509 阅读 · 0 评论 -
浅谈Selector创建机制
转载地址:http://ari.iteye.com/blog/1039014前段时间阅读mina源码时,理解Selector实例化机制细节有点疑惑疑惑,主要是SelectorProvider的细节实现方面。通常创建一个Selector,通过静态open方法创建一个实例。代码如下:Selector selector = Selector.open();转载 2014-04-01 01:33:29 · 598 阅读 · 0 评论 -
netty3.2.3源码分析--服务器端读数据分析
上一篇分析了serverboostrap的启动,接下来分析netty的数据读取。在nioworker的,负责读取操作是由,在该方法中,如果当前channel的(readyOps & SelectionKey.OP_READ) != 0 || readyOps == 0,且此时ch.read(buff)private boolean read(SelectionKey k) {转载 2014-05-07 00:13:55 · 855 阅读 · 0 评论 -
I/O事件处理模型之Reactor和Proactor
在编写服务端软件的时候,如何处理各种I/O事件是其中很重要的一部分。在Unix Network Programming中介绍了5种Unix/Linux下可用的I/O编程模型:1)阻塞式I/O; 2)非阻塞式I/O; 3)I/O复用; 4)信号驱动式I/O; 5)异步I/O。这几种都是基本的I/O编程模型,可以单独使用其中一种,也可以组合使用。为了应对高并发量的情形,在C10K Proble转载 2014-05-07 00:49:02 · 904 阅读 · 0 评论 -
【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较
http://www.cppblog.com/pansunyou/archive/2013/11/19/139343.html转载 2014-05-07 01:06:32 · 711 阅读 · 0 评论 -
Java NIO框架Netty教程(十二)-并发访问测试(中)
写在前面:对Netty并发问题的测试和解决完全超出了我的预期,想说的东西越来越多。所以才出现这个中篇,也就是说,一定会有下篇。至于问题点的发现,OneCoder也在努力验证中。继续并发的问题。在《Java NIO框架Netty教程(十一)-并发访问测试(上)》中,我们测试的其实是一种伪并发的情景。底层实际只有一个Channel在运作,不会出现什么无响应的问题。而实际的并发不是这个意思的,独转载 2014-03-27 01:19:55 · 1058 阅读 · 0 评论