Java编写基于netty的RPC框架
2018-11-15 15:22
821 查看
一 简单概念 RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样. 阻塞IO :当阻塞I/O在调用InputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerSocket.accept()方法时,也是阻塞,直到有客户端连接才返回,I/O通信模式如下:
图片描述(最多50字)
缺点:当客户端多时,会创建大量的处理线程,并且为每一个线程分配一定的资源;阻塞可能带来频繁切换上下文,这时引入NIO NIO : jdk1.4引入的(NEW Input/Output),是基于通过和缓存区的I/O方式,(插入一段题外话,学的多忘得也多,之前有认真研究过NIO,后来用到的时候,忘得一干二净,所以学习一些东西,经常返回看看),NIO是一种非阻塞的IO模型,通过不断轮询IO事件是否就绪,非阻塞是指线程在等待IO的时候,可以做其他的任务,同步的核心是Selector,Selector代替线程本省的轮询IO事件,避免了阻塞同时减少了不必要的线程消耗;非阻塞的核心是通道和缓存区,当IO事件的就绪时,可以将缓存区的数据写入通道
图片描述(最多50字)
其工作原理: 1 由专门的线程来处理所有的IO事件,并且负责转发 2 事件驱动机制:事件到的时候才触发,而不是同步监视 3 线程通讯:线程之间通讯通过wait,notify等方式通讯,保证每次上下文切换都是有意义的,减少没必要的线程切换 通道 : 是对原I/O包中流的模拟,所有数据必须通过Channel对象,常见的通道FileChannel,SocketChannel,ServerSocketChannel,DatagramChannel(UDP协议向网络连接的两端读写数据)
图片描述(最多50字)
Buffer缓存区 :实际上是一个容器,一个连续的数组,任何读写的数据都经过Buffer
图片描述(最多50字)
Netty :是由JBOSS提供的一个java开源框架,是一个高性能,异步事件驱动的NIO框架,基于JAVA NIO提供的API实现,他提供了TCP UDP和文件传输的支持,,所有操作都是异步非阻塞的.通过Futrue-Listener机制,本质就是Reactor模式的现实,Selector作为多路复用器,EventLoop作为转发器,而且,netty对NIO中buffer做优化,大大提高了性能 二 Netty 客户端和服务端的 Netty中Bootstrap和Channel的生命周期 Bootstrap简介 Bootstarp:引导程序,将ChannelPipeline,ChannelHandler,EventLoop进行整体关联
图片描述(最多50字)
Bootstrap具体分为两个实现 ServerBootstrap:用于服务端,使用一个ServerChannel接收客户端的连接,并创建对应的子Channel Bootstrap:用于客户端,只需要一个单独的Channel,配置整个Netty程序,串联起各个组件 二者的主要区别: 1 ServerBootstrap用于Server端,通过调用bind()绑定一个端口监听连接,Bootstrap用于Client端,需要调用connect()方法来连接服务器端,我们也可以调用bind()方法接收返回ChannelFuture中Channel 2 客户端的Bootstrap一般用一个EventLoopGroup,而服务器的ServerBootstrap会用两个第一个EventLoopGroup专门负责绑定到端口监听连接事件,而第二个EventLoopGroup专门用来处处理每个接收的连接,这样大大提高了并发量[p]public class Server {
public static void main(String[] args) throws Exception {
// 1 创建线两个事件循环组
// 一个是用于处理服务器端接收客户端连接的
// 一个是进行网络通信的(网络读写的)
EventLoopGroup pGroup = new NioEventLoopGroup();
EventLoopGroup cGroup = new NioEventLoopGroup();
// 2 创建辅助工具类ServerBootstrap,用于服务器通道的一系列配置
ServerBootstrap b = new ServerBootstrap();
b.group(pGroup, cGroup) // 绑定俩个线程组
.channel(NioServerSocketChannel.class) // 指定NIO的模式.NioServerSocketChannel对应TCP, NioDatagramChannel对应UDP
.option(ChannelOption.SO_BACKLOG, 1024) // 设置TCP缓冲区
.option(ChannelOption.SO_SNDBUF, 32 1024) // 设置发送缓冲大小
.option(ChannelOption.SO_RCVBUF, 32 1024) // 这是接收缓冲大小
.option(ChannelOption.SO_KEEPALIVE, true) // 保持连接
.childHandler(new ChannelInitializer<SocketChannel>() {[url=http://blog.51cto.com/14028890/mailto:br/>@Override@Override@Override@Override}
@Override}
@Override/.addListener(ChannelFutureListener.CLOSE);
}
@Override/.addListener(ChannelFutureListener.CLOSE);
}
@OverrideSystem.out.println(]ctx.flush();
}
@Override
相关文章推荐
- 基于Netty的高性能JAVA的RPC框架
- 基于Netty的高性能JAVA的RPC框架
- 在IDEA中基于Maven编写Hibernate框架的javaweb程序
- 基于netty轻量的高性能分布式RPC服务框架forest<下篇>
- 基于Netty构建高性能RPC通信框架
- (基于Java)编写编译器和解释器-第2章:框架I:编译器和解释器-第二部分(连载)
- 基于hessian和netty的RPC框架设计和实现
- 自定义基于netty的rpc框架(2)---服务端的实现
- 基于Netty的RPC框架
- 自定义基于netty的rpc框架(1)
- 基于Netty的RPC简单框架实现(二):RPC服务端
- summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)
- (基于Java)编写编译器和解释器-第2章:框架I:编译器和解释器-第一部分(连载)
- Java实现一个简单的RPC框架(五) 基于Socket的传输层实现
- 编写自己rpc框架——java rpc的实现
- DUBBO 一个高性能,基于Java的开源RPC框架
- Java利用Sping框架编写RPC远程过程调用服务的教程
- (基于Java)编写编译器和解释器-第2章:框架I:编译器和解释器-第二部分(连载)
- (基于Java)编写编译器和解释器-第2章:框架I:编译器和解释器-第一部分(连载)
- 自定义基于netty的rpc框架(3)---客户端的实现