使用Netty手写一个简单的rpc调用,更好的了解rpc框架。本文需要了解一些netty,建议在有netty的基础上看
涉及到的代码类有:
ClientBootStrap:客户端启动程序
NettyClient:客户端Netty初始化程序
NettyClientHandler:客户端发送消息处理程序
NettyServer:服务端Netty初始化程序
NettyServerHandler:服务端手动消息后的处理程序
ServerBootStrap:服务端启动程序
调用流程
1、ServerBootStrap服务端启动程序 ,执行NettyServer的初始化方法,进行监听对应的ip:port
2、ClientBootStrap客户端启动程序,在本地调用服务端方法。通过调用目标方法获取对应的代理类,代理类中进行客户端netty的初始化程序,和服务端创建连接,将调用的方法进行消息封装,将消息发送给服务端,等待结果返回。
3、服务端收到消息后进行处理消息(NettyServerHandler),对客户端发送过来的消息体进行解析,通过放射调用对应的方法,将结果返回。
4、客户端收到结果返回。
NettyClientHandler
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import java.util.concurrent.Callable;
/**
* @Descirption:
* @Author: whc
* @Data: 2023/4/6 3:49 PM
*/
public class NettyClientHandler extends ChannelInboundHandlerAdapter implements Callable {
private ChannelHandlerContext context;
private String result;
private String param;
/**
* 与服务器链接创建成功后会执行
* @param ctx
* @throws Exception
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
this.context = ctx;
}
/**
* 收到服务器的数据后进行调用
* @param ctx
* @param msg
* @throws Exception
*/
@Override
public void channelRead(ChannelHandlerContext ctx