今天我们说说netty可以干什么吧,这是什么东西.
Netty是一套开发框架,和spring,hibernate等等一样都是框架,但是(重点来了哈)它和后两者的功能不一样。采用框架开发项目的好处不言而喻了。
Netty是基于java NIO开发出来的框架,也就是说,它是java编写的,主要用到了java NIO库,还有线程那些东西。所以Netty的jar引入的时候不需要下载额外的jar包了。java NIO就不多说了,不懂就暂且当成IO,但是记住,有区别。
Netty这套框架主要用于C/S的项目,但是现在C、B已经很混淆了,我就说Netty可以开发用哪些协议的项目吧,TCP/IP,HTTP,UDP等等,如果不懂,就先记着,但是记住自己还有哪些不懂的哦。:)
下面我举个例子说明下Netty的优越性,在以前我用java开发web项目的时候,前后台数据交互时,我是不需要懂自己传输的,我只知道一些方法,譬如request.getparameter()就拿到前台传过来的数据了,但是这中间经历了什么,我是不知道的,就算不知道 好像也不影响我开发项目。但是(哈哈,好像每个但是都是重点哦)这样我能知道我的服务器这个时间点上传输了多少K的数据吗?显然有些麻烦。(问题来了,网络传输,数据是以什么形式传送的?)另外,HTTP协议每次都要传输头信息,等等很多信息,这会很消耗带宽的哦。
后来啊,程序员前辈就想了很多方法来减少数据传输的量,譬如,现在熟知的,Ajax请求,每次只需要传输响应的数据就OK了,这种键值对的传送方式确实很大程度上削减了传输的数据量,而且开发起来也相当的友好。
但是HTTP协议有个非常痛苦的缺点,它是没有记忆的哦。也就是说,服务器是不记得你的哦,但是前辈的智慧是无穷的,session很好解决了这个问题,而分布式网络系统,首先要解决的就是这个session共享的问题,其实嘛,我们不用怕,别被这种高大上的词给唬住了,那都不是事,遇到问题一样能解决。
好了,这个例子一下就说大了,一句话总结,东西大了问题就多。
而Netty天生就不怕这些大批量的东西(其实到了很大的时候 它也搞不定),以TCP/IP开发为例说明下Netty相关的内容;
1,Netty可以让程序员直接接触到传输的字节流,也就是说,你清楚的知道我TM传了这么多东西啊!
2,Netty允许你用第三方或者是自己编写的字节编解码器,譬如Facebook的Thrift压缩二进制编码技术,Google的protobuf编码(很高大上?其实就是Object转成byte,这有什么啊,专门吓唬我们这种小白?哎,社会啊),这些编码技术确实很厉害,相比java自带的序列化性能强得不是一星半点,但是so what,我司自己进行编码,解码,直接操作字节流(但是很痛苦有木有){喂,喂,那谁,这前三个字节是指令。那谁,接着的7个字节是长度},哎。就怕前期设计不好,后期从新设计。而且不同的指令,字节流不同啊 。所以,这个时候就考验设计模式学得怎么样了。一展开话题就很多了,不说了。
3,拓展性,今天你用它开发tcp,明天可以开发UDP,后天来个WebSocket.那么问题来了,如果出现这种事,你猜我会骂谁?
4,哎,说得自己都醉了。先学学,学好了直接用上去,项目跑起来再说,一遍一遍的重构,心得体会就都有了。
好了不说了,来例子吧。Netty用在什么地方,阿里的dubbo,hadoop。现在不说,今天就到这吧。
对了,我忘记说,大家可以去Netty的官网,找到一些官方给出的例子,这些很好,能跑起来;官方还给出了一些git的链接,但是这里面的项目,我试两个,都没法正常的运行。参照这些例子,再买本书,好好研究下,直接搞项目,没问题。