netty是基于NIO(同步非阻塞)开发的网络通信框架;对比传统BIO(阻塞IO),其并发性能有很大提升。而dubbo的底层就是使用netty作为网络框架,本文就手写简单的基于netty的RPC框架。
1 设计步骤
定义一个通用接口,作为服务提供者(provider)和消费者(consumer)之间的操作纽带
创建一个服务提供者,实现通用接口,并返回处理结果;网络方面监听消费者请求
创建一个服务消费者,通过代理模式调用远程服务接口
1.1 程序目录
1.2 定义一个通用接口
public interface TestService {
String hello(String msg);
}
2 服务提供者模块
2.1 接口实现
public class TestServiceImpl implements TestService {
@Override
public String hello(String msg) {
System.out.println("TestServiceImpl中hello被调用,参数:" + msg);
return "你好客户端,我已经收到你的消息:" + msg;
}
}
2.2 定义一个服务启动类
public class ServerBootStrap {
public static void main(String[] args) {
NettyServer nettyServer = new NettyServer(40004);
nettyServer.init();
}
}
2.3 创建netty服务端
**此步骤是netty常规服务端创建方式**
public class NettyServer {
private int port;
public NettyServer(int port) {
this.port = port;
}
public void init() {
//创建一个用于接收连接的线程组,参数代表线程个数
EventLoopGroup boss = new NioEventLoopGroup(1);
//创建处理操作时间的线程组,没有参数netty会默认线程为内核数*2
EventLoopGroup worker = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap
.group(boss, worker)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new StringDecoder()