一、dubbo 的通讯协议


、dubbo 协议,是默认的基于TCP 传输协议的长连接,NIO 异步通信,适合于小数据量高并发的场景以及服务消费者机器数远大于服务提供者机器数的情况。


,不适合大文件,视频的传输


连接个数:单连接


连接方式:长连接


传输协议:TCP


传输方式:NIO 异步传输


序列化:Hessian 二进制序列化


适用范围:传入传出参数数据包较小(建议小于100K ),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo 协议传输大文件或超大字符串。


适用场景:常规远程服务方法调用


 


、RMI 协议


协议采用JDK 标准的java.rmi.* 实现,采用阻塞式短连接和JDK 标准序列化方式


标准的远程调用协议。


 


连接个数:多连接


连接方式:短连接


传输协议:TCP


传输方式:同步传输


序列化:Java 标准二进制序列化


适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。


适用场景:常规远程服务方法调用,与原生RMI 服务互操作


 


、hession 协议


协议用于集成Hessian 的服务,Hessian 底层采用Http 通讯,采用Servlet 暴露服务,Dubbo 缺省内嵌Jetty 作为服务器实现


 


基于Hessian 的远程调用协议。


 


连接个数:多连接


连接方式:短连接


传输协议:HTTP


传输方式:同步传输


序列化:Hessian 二进制序列化


适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。


适用场景:页面传输,文件传输,或与原生hessian 服务互操作


 


、Http 协议


采用Spring 的HttpInvoker 实现


基于http 表单的远程调用协议。


 


连接个数:多连接


连接方式:短连接


传输协议:HTTP


传输方式:同步传输


序列化:表单序列化(JSON )


适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL 传入参数,暂不支持传文件。


适用场景:需同时给应用程序和浏览器JS 使用的服务。


 


、webservice


基于CXF 的frontend-simple 和transports-http 实现


基于WebService 的远程调用协议。


 


连接个数:多连接


连接方式:短连接


传输协议:HTTP


传输方式:同步传输


序列化:SOAP 文本序列化


适用场景:系统集成,跨语言调用。


 


 


、thrif


是Facebook 捐给Apache 的一个RPC 框架,当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如service name ,magic number 等。Thrift 不支持null 值,不能在协议中传null


 


、redis 协议


 


、memcached 协议