首先rpc是一种框架,而不是一种协议,而协议就设计到编解码,如grpc框架采用的是HTTP2协议,而HTTP2是采用protocolbuf来进行编解码。
dubbo rpc框架采用dubbo通信协议,编解码也是采用dubbo特有的编解码方式
sofaRpc框架采用的是bolt私有协议,由蚂蚁金服开发
Go RPC可以利用tcp或http来传递数据,可以对要传递的数据使用多种类型的编解码方式。golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp或http数据传输方式,由于其他语言不支持gob编解码方式,所以使用net/rpc库实现的RPC方法没办法进行跨语言调用。
为此golang官方还提供了net/rpc/jsonrpc库实现RPC方法,JSON RPC采用JSON进行数据编解码,因而支持跨语言调用。但目前的jsonrpc库是基于tcp协议实现的,暂时不支持使用http进行数据传输。