高性能网络通信框架—Netty
从开始工作起,就开始学习Netty框架,用于服务器之间的通信,后来知道阿里的Dubbo底层使用的就是Netty,在微服务方面应用很广,在这里将Netty方面的知识整理一下,希望感兴趣的小伙伴多多关注!
山主_33
微信搜:山主
展开
-
NIO编程
这里首先声明:我导入的jar包是5.0的jar包。在写这个demo之前最好先学习一下NIO 的基础方法,至少知道哪个方法是干什么用的。这篇博文的代码实现了一个简单的时间服务器:客户端发送请求,服务端判断接收到的请求返回不同的信息。NIO服务端代码:public class TimeServer { public static void main(String[] args)原创 2017-08-09 22:55:10 · 267 阅读 · 0 评论 -
Netty学习之NIO---通道Channel(一)
一、关于通道的简单概述:通道主要用于源节点和目标节点的连接,channel本身不存储数据,需要配合缓冲区进行数据的传输。二、获取通道的主要途径:1.Java针对支持通道的类提供了getChannel()方法;2.在JDK1.7中的NIO.2,针对各个通道提供了静态方法open();3.在JDK1.7中的NIO.2,的Files工具类中提供了newByteChannel()方法;原创 2017-08-21 22:59:52 · 3720 阅读 · 0 评论 -
Netty学习之BIO(阻塞IO)
传统的IO传输,服务端会一直等待客户端传来数据,不能做其他事,便处于阻塞状态,即阻塞IO。通过把一个文件从客户端传输到服务端的案例来理解一下BIO:首先是客户端的代码: @Test public void client(){ try { //1.获取通道 SocketChannel clientChan原创 2017-08-25 00:28:35 · 567 阅读 · 0 评论 -
Netty入门应用开发
使用netty开发一个实现以下功能的程序:客户端向服务端发送消息,服务端返回消息。首先是服务端的代码:public class NettyServer { public static void main(String[] args) { new NettyServer().bind(8989); } public void bind(int port原创 2017-08-27 21:34:21 · 287 阅读 · 0 评论 -
Netty学习之---TCP粘包和拆包
TCP粘包/拆包问题:1.TCP是个“流协议”,所谓流,就是没有界限的一串数据。2.它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是TCP粘包 和拆包问题。3.TCP粘包/拆包发生的原因:①应用程序write写入的字节大小大于套接口原创 2017-08-29 22:23:23 · 420 阅读 · 0 评论 -
分隔符和定长解码器在netty中的应用
两种解码器:DelimiterBasedFrameDecoder和FixedLengthFrameDecoder前者可以自动完成以分隔符做结束标志的消息的解码;后者可以自动完成对定长消息的解码。首先是分隔符解码器在netty中的应用,服务端:public class EchoServer { public static void main(String[] args) {原创 2017-08-31 21:57:42 · 265 阅读 · 0 评论 -
Netty心跳检测篇之IdleStateHandler
Netty提供了对心跳机制的天然支持,心跳检测可以检测远程端是否存活,或者活跃。今天,我们就一起初识一下Netty4的心跳机制。Netty4.0提供了一个类,名为IdleStateHandler,这个类可以进行三种类型的心跳检测。这个类的构造参数是这样的:前三个的参数解释如下:(1).readerIdleTime:为读超时间(即测试端一定时间内未接收到被测试端消息);(2).writerIdleT...原创 2017-09-17 14:35:40 · 3580 阅读 · 0 评论 -
Netty心跳检测篇之简单实例
前面简单地了解了一下IdleStateHandler,我们现在写一个简单的心跳demo:1)服务器端每隔5秒检测服务器端的读超时,如果5秒没有接受到客户端的写请求,也就说服务器端5秒没有收到读事件,则视为一次超时2)如果超时二次则说明连接处于不活跃的状态,关闭ServerChannel3)客户端每隔4秒发送一些写请求,这个请求相当于一次心跳包,告之服务器端:客户端仍旧活着我们开始先开始写服务器端的...原创 2017-09-17 14:47:12 · 1072 阅读 · 0 评论 -
Netty线程模型之服务端线程模型
笔记来源:http://www.infoq.com/cn/articles/netty-threading-model/一、服务端线程模型:一种比较流行的做法是服务端监听线程和IO线程分离,类似于Reactor的多线程模型,它的工作原理图如下:下面结合Netty的源码,对服务端创建线程工作流程进行介绍:1.第一步,从用户线程发起创建服务端操作,代码如下:EventLoopGroup管理的线程数可以...原创 2017-09-18 23:46:45 · 620 阅读 · 0 评论 -
Netty线程模型之客户端线程模型
相比于服务端,客户端的线程模型简单一些,它的工作原理如下:第一步:由用户线程发起客户端连接,示例代码如下:客户端只需要创建一个EventLoopGroup,因为它不需要独立的线程去监听客户端连接,也没有必要通过一个单独的客户端线程去连接服务端。Netty线程是异步事件驱动的NIO框架,它的连接和所有IO操作都是异步的,因此不需要创建单独的连接线程。相关代码如下:当前的group()就是之前传入的E...原创 2017-09-24 21:37:32 · 1960 阅读 · 0 评论