上一次课中,我们初步了解到Netty 中内置的HTTP 协议,需要HTTP 的编、解码器来完成解析。今天,我们来看自定义协议如何设定?
在Netty 中要完成一个自定义协议,其实非常简单,只需要定义一个普通的Java 类即可。我们现在手写RPC 主要是完成对Java 代码的远程调用(类似于RMI,大家应该都很熟悉了吧),远程调用Java 代码哪些内容是必须由网络来传输的呢?譬如,服务名称?需要调用该服务的哪个方法?方法的实参是什么?这些信息都需要通过客户端传送到服务端去。
下面我们来看具体的代码实现,定义InvokerProtocol 类:
import lombok.Data;
import java.io.Serializable;
/**
* 自定义传输协议
*/
@Data
public class InvokerProtocol implements Serializable {
private String className;//类名
private String methodName;//函数名称
private Class<?>[] parames;//参数类型
private Object[] values;//参数列表
}
从上面的代码看出来,协议中主要包含的信息有类名、函数名、形参列表和实参列表,通过这些信息就可以定位到一个具体的业务逻辑实现。