netty
文章平均质量分 75
fjs_cloud
这个作者很懒,什么都没留下…
展开
-
java nio入门
好久没有搞过java了,io方面弄过了node.js,弄过c的libevent和nginx,没有弄过java一定是很大的遗憾,因此有必要把java的netty框架搞搞。。。但是在搞搞之前还有必要重新看看nio方面的知识。。。。好像是在jdk1.4之后,java引入了新的nio,大大的提高了java在io方面的表现。。。具体它的下面是怎么实现的暂时还不清楚,可能还真是非阻塞的吧。。。原创 2013-05-13 12:51:39 · 2346 阅读 · 0 评论 -
java的Callable接口
java也算是原生的支持多线程吧,但是如何让线程执行完成之后能够有返回值返回到主线程呢。。。?一般情况下线程是实现runable接口,但是如果想要返回值的话那么就应该实现Callable接口了。。。好了,还是不多说废话,直接上一个简单的例子就好了。。。package fjs;import java.util.ArrayList;import java.util.concurr原创 2013-05-14 09:59:02 · 2776 阅读 · 0 评论 -
java netty之DefaultChannelPipeline
前面分析过ChannelPipeline的定义,以及它的集成体系,这篇文章深入一些,分写一个它的实现类DefaultChannelPipeline,它直接实现了ChannelPipeline接口。。。我们首先来看它的一些重要的属性: final Channel channel; //当前pipeline所属的channel //head和tail都是handler上下文,但是不原创 2013-07-02 16:24:00 · 21033 阅读 · 3 评论 -
java netty之MessageToByteEncoder
上面的文章已经说过了decoder,它的用处是将读取的byte数据转化为用户自己定义的数据类型这一篇文章要说的encoder,它的作用与前面提到的decoder就相反了,用于将用户定义的类型转化为byte类型,这样才能通过channel发送出去。。。我们还是先来看看它的继承体系吧:可以看到它继承自messageadapter,这种类型我们在前面已经有过说明,adapter的作用原创 2013-07-18 14:19:48 · 11784 阅读 · 0 评论 -
java ThreadLocal与其应用(netty)
刚开始看netty源代码的时候就遇到了ThreadLocal这个东西,当时就不太明白这个东西到底干嘛用的,上网稍微查了一下,好像大家说法都不太一样,有的说是为了方便线程维护自己的变量,有的又说是什么方便并发编程。。我擦。。感觉凌乱了。。还是自己好好看看靠谱。。。首先ThreadLocal确实是用于线程存储本地变量的一种很不错的方法,在这里,一般情况下,都用于保存当前变量独有的对象实例,如果好多原创 2013-07-18 16:56:45 · 2310 阅读 · 0 评论 -
java netty之一个write跟踪(数据发送)
在深入分析ServerBootstrap之前,先来跟踪一个write的过程吧,也就是数据发送的过程。。。。先来看看这个例子的代码吧,server部分的初始化:public class NettyServer { public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup();原创 2013-07-04 21:14:44 · 14362 阅读 · 5 评论 -
netty事件驱动总结
netty也看了一段时间了,从最开始的勇斗不会用,到现在能够理解它的实现运行原理,还是蛮有成就感的。。而写到越发的觉得不管是c还是java,其实最终设计都差不太多。。。好像如果要总结的写可以写很多字,画很多图,算了吧,好麻烦,一切尽在不言中,来一个图吧:原创 2013-07-24 15:30:43 · 2224 阅读 · 0 评论 -
java线程池的实现原理(netty)
博客已经好久都没有写了,感觉自己变慵懒了。。。这本来也是应该早就应该要写的。。。在前面读netty源代码的时候就可以看到netty本身就自己实现了一个线程池,而且也自己实现了future,并且实现的功能更加的强大。。。future还可以添加listener,这个刚开始自己觉得最为神奇。。当看完了它是怎么实现的之后觉得设计还是挺漂亮的。。。要自己实现java的线程池,那么有两个接口是需要熟悉原创 2013-08-02 18:13:52 · 7315 阅读 · 0 评论 -
netty新版本源码阅读(4.0.9.final)
好久没有看netty了,今天无意中一个东西用到了netty,发现原来新版本的final都已经出来了。。但是我以前看的都是4.0的rc版本。。。瞬间觉得好郁闷。。。不过起码以前看过了netty的代码,它的主要的脉络还是一样的。。在这里还要赞一下final版本,它对数据的处理变得更简单了,,看起来更清晰。。。。这里就拿数据的读取来举例子吧:(1)还是先从nioeventloop中获原创 2013-09-11 15:39:32 · 4019 阅读 · 1 评论 -
netty与protobuf与node.js
接触netty的源代码应该也有好几个月的时间了,一直觉得只是了解了一个框架的设计和原理,而不能熟练的运用这个框架也算是非常遗憾的事情了,尤其是以前读了nginx的部分代码,而我现在都还不会配置nginx服务器,好囧。。。可能也没有机会用nginx吧。。。不能强求。。。netty不能够继续遗憾,其实它的运用无非就是用它定义的一些基础handler或者再定义自己的handler用于处理传输和接收数原创 2013-09-12 14:14:30 · 7004 阅读 · 1 评论 -
netty之http部分handler的使用与超时控制handler
前面的文章讲过了netty中使用protobuf的handler,那么这部分讲讲使用的最多的一种handler的使用情况,http部分的handler,另外再来讲讲超时控制handler的实现好了,废话不多说,直接上主程序的代码:package fjs;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.原创 2013-09-13 11:19:46 · 12228 阅读 · 0 评论 -
netty的websocket服务端开发
前两篇文章分析了node.js版本的socket.io的服务端与客户端的代码,其实他们socket.io就是在websocket的基础上进一步做了一层封装,添加了一些心跳,重连接。。。这篇文章就先来看看在netty中是如何建立websocket服务端的吧,先来回顾一下websocket建立连接以及通信的过程:(1)客户端向服务端发送http报文格式的请求,而且是GET方法的请求,不过这里与原创 2013-10-12 20:15:11 · 8587 阅读 · 0 评论 -
netty中的一个小bug
在读netty的websocket处理的handler部分的代码的时候,发现了一个小bug,不过这个bug不会造成太大的影响,我们来看看WebSocketServerProtocolHandler的decode部分的代码: @Override protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame原创 2013-10-14 09:51:20 · 5249 阅读 · 0 评论 -
netty中ByteBuf部分的分析
好久木有看代码了,今天把以前读netty源码的时候一直没有看的Buffer部分粗略的看了下,刚开始主要是觉得buffer这个包里面类太多了,觉得比较麻烦,而且相对理解整个netty的设计不太影响,所以就拖着没看,但是记得有一次跟支付宝的技术问了我关于netty中buffer的问题,自己回答的不太好,嗯,该看的还是要看的。。。。原创 2014-02-24 20:26:13 · 6705 阅读 · 2 评论 -
netty开发基于长连接的http客户端
今天遇到了一个广告网络比较现实的需求,如下:最为一个广告服务端,可以从publisher的app接收到很多的加载广告的请求。。。这个时候可以将这些请求的数据发给一些中间的机构(exchange),然后由他们返回广告的数据。。。因为请求量较大,而且要保证延迟不能太高,所以这里与这些中间机构进行通信的时候就只能采用长连接的方式了,不能每次请求都生成一次连接来进行http请求。。。其实以前一般用netty开发都是作为服务端来的,很少用作客户端。。。在网上找了一下代码,好像找不到类似立马可以用的,没办法了,只有原创 2014-03-19 19:42:15 · 14973 阅读 · 3 评论 -
java netty之DefaultChannelHandlerContext
在进一步分析pipeline以及handler之前,有必要先看一下handlercontext的定义,在netty中,handler的调用都不是直接的,而是通过handlercontext间接进行的,而且handlercontext为这些handler管理了处理的数据,毕竟java没有javascript闭包那么方便,所以变量这写需要进行额外的维护。。。。。还是按照惯例,先看看DefaultC原创 2013-07-02 10:40:37 · 4557 阅读 · 0 评论 -
java nio selector的使用
在继续深入netty之前,还是补习一下java的selector的使用吧,没想到java里面用起来跟epoll什么的也差不太多。。。好吧,废话少说,直接上代码了,反正也比较的简单,也就不细说了。。。。。package fjs;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.By原创 2013-06-18 15:49:15 · 1796 阅读 · 0 评论 -
java nio之buffer的分析
在java nio中,与数据打交道是通过channel与buffer进行的。。。其实buffer的定义在I/O操作中还是蛮平常的,起码在nginx和libevent中都有自己定义buffer,只不过nginx的定义可能更复杂一些,libevent就相对简单一些吧。。。其实在java nio中buffer的定义也还蛮简单的吧。。。。有三个重要的属性:(1)limit(2)原创 2013-06-28 21:25:47 · 1610 阅读 · 0 评论 -
netty入门(1)
netty框架的编程风格和异步回调就很相似了。。。。首先还是先入门netty吧,从简单的一点一点来。。。直接上代码吧。。。:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import i原创 2013-05-13 14:10:36 · 3784 阅读 · 5 评论 -
Netty EventLoop与EventExecutor分析(1)
现在算是正式开始进入Netty的源码了吧,首先从事件循环的执行部分开始吧,上图就是顶层的几个接口之间的关系,首先我们来看最上层的EventExecutorGrouppublic interface EventExecutorGroup extends ScheduledExecutorService, Iterable { /** * Returns {@code true}原创 2013-05-14 10:21:22 · 7543 阅读 · 0 评论 -
NioEventLoopGroup
好像在netty里面用的最多的还是NioEventLoopGroup吧,那么就主要来看看它的继承体系吧:现在感觉在netty框架里面,eventexecutorgroup和eventloopgroup之间的关系有点错综复杂,其实现在感觉这样理解应该是可以的:最终对于用户,一般都eventloopgroup作为使用的入口,也就是所谓的事件循环吧,主要是用于事件的注册。然后在这些eve原创 2013-06-18 14:34:35 · 4397 阅读 · 0 评论 -
NioEventLoop
上一篇文章提到了NioEventLoopGroup,那么这篇文章就要提到NioEventLoop了,可以简单的理解为一个NioEventLoopGroup中有很多NioEventLoop真正的执行工作。首先我们还是来看一下NioEventLoop的继承体系:其实相对还是比较直线型的集成体系。。首先在AbstractEventExecutor中定义了一些基本的executor的方法,原创 2013-06-20 18:28:55 · 2423 阅读 · 0 评论 -
java netty之AbstractNioChannel
前面的文章分析了eventloopgroup以及eventloop的继承体系,在这篇文章主要分析以下netty对channel的封装,我只对nio感兴趣,那么就只分析对nio这一部分的封装。。。。主要来分析以下的继承体系:channel是netty定义的顶层接口,其无非就是定义了一些基本的方法,例如返回当前channel所属的eventloop,判断channel是否已经打开,原创 2013-06-24 10:51:29 · 2362 阅读 · 0 评论 -
java netty之ServerBootstrap的启动
通过前面的几篇文章,对整个netty部分的架构已经运行原理都有了一定的了解,那么这篇文章来分析一个经常用到的类:ServerBootstrap,一般对于服务器端的编程它用到的都还算是比较的多。。看一看它的初始化,以及它的运行原理。。。首先我们还是引入一段代码,通过分析这段代码来分析ServerBootstrap的运行。。。EventLoopGroup bossGroup = new NioEv原创 2013-07-11 15:40:44 · 15979 阅读 · 4 评论 -
Java netty之NioServerSocketChannel
在上一篇文章中分析了AbstractNioChannel,那么在这一篇文章中就分析一个具体的NioChannel类。。。NioServerSocketChannel类用过netty的应该都比较熟悉吧,如果做服务器端的编程,那么我们一般情况下都是使用的这种类型的channel。按照惯例,我们还是先来分析一下它的继承体系:NioServerSocketChannel直接继承自Abs原创 2013-06-25 15:44:19 · 3872 阅读 · 0 评论 -
java netty handler之ChannelInboundHander与ChannelOutboundHandler
前面的文章主要分析的是netty的事件驱动的部分,这篇文章就来看看其handler的定义吧,还是先来看看它的继承体系:上面的是整个netty的handler最为顶层的几个接口的定义首先是ChannelHandler,它定义的方法并不多,而且这些方法的用处都不是太多,不过这里有的比较重要的注释,也就是这个handerl是否可以共享(1)可以共享,那么表示我们这个handler对象最终原创 2013-07-12 14:36:24 · 4114 阅读 · 0 评论 -
java netty之ChannelInitializer
这篇文章来分析一个比较简单的handler--ChannelInitializer,这个在我们创建serverbootstrap的时候会经常用到,它用于对刚刚接收的channel进行初始化。。。ServerBootstrap b = new ServerBootstrap(); //构建serverbootstrap对象 b.group(bossGroup, workerGroup);原创 2013-07-13 10:45:29 · 12960 阅读 · 1 评论 -
java netty之NioSocketChannel
上一篇文章分析了NioServerSocketChannel,在这篇文章分析一下另外一种SocketChannel,其实也是调用accept之后创建的channel。。。还是按照惯例来,先看一下它的继承体系吧:其实和ServerSocketChannel差不太多,只不过这里直接继承的是AbstractNioByteChannel,而不是AbstractNioMessageChannel原创 2013-06-28 20:59:49 · 3793 阅读 · 0 评论 -
java netty之ChannelInboundByteHandlerAdapter
这篇文章分析另外一个表重要比较基础的handler : ChannelInboundByteHandlerAdapter当我们编写的服务器程序需要直接处理byte的时候,可以直接扩展它来实现inboundhandler,用于处理传送过来的byte数据。。。例如举一个典型的用法:public class MyChannelHandler extends ChannelInboundByteHan原创 2013-07-15 10:40:32 · 2740 阅读 · 1 评论 -
java netty之decoder与encoder的使用
在前面的文章中,对netty的使用都是基于byte类型的,但是在实际情况,直接处理byte数据是很少的,一般都是将这些数据转换成自己定义的一些类型。也就是说在实际情况下decoder与encoder都是用到比较多的handler类型,想要了解他们是怎么实现的,我觉得首先应该知道他们是怎么使用的,那么就用官方说明的UnixTime作为例子来简单的说民一下decoder与encoder是怎么使用的原创 2013-07-16 14:29:59 · 16594 阅读 · 0 评论 -
java netty之ChannelPipeline
好像在前面的文章中,把netty定义的channel基本上都还算分析了一下吧。。但是channel部分空缺了一个比较重要的东西没有分析,那就是pipeline,所有的操作都是通过pipeline来进行的。。。还是按照惯例,先来看看ChannelPipeline的继承体系:这里看到的是三个最顶层的接口,ChannelPipeline同时继承了ChannelInboundInvoker和Cha原创 2013-07-01 15:20:55 · 3937 阅读 · 0 评论 -
java netty之ByteToMessageDecoder
在上面的一篇文章中,有说明ByteToMessageDecoder是怎么使用的,那么这一篇就来讲讲它是怎么实现的。。首先还是来看一下它的继承体系:它直接继承自ChannelInboundByteHandlerAdapter类型,至于说这个类型的介绍,在前面的文章中就已经有了说明,无非是实现了那些inboundhandler的方法,不过实现的都非常的粗糙,另外一些handler可以直原创 2013-07-17 10:42:52 · 7116 阅读 · 1 评论 -
支持并发的http客户端(基于tcp连接池以及netty)
闲来无事,将以前自己写的一个库放出来吧。。有的时候会有这样子的需求:(1)服务器A通过HTTP协议来访问服务器B(2)服务器A可能会并发的像B发送很多HTTP请求类似于上述的需求,可能并不常见。。。因为在业务中确实遇到了这样子的场景,所以就自己动手开发了一个库。。。原创 2014-06-22 18:05:36 · 8144 阅读 · 2 评论