协议
协议
通俗易懂地解释就是通信双方需要遵循的约定。
我们了解的常见的网络传输协议有tcp、udp、http等。再到我们常用的基础组件,一般来说client端与server端也有相应的协议,如redis、mysql、zookeeper等都是各自约定的私有协议,同样今天标题中的dubbo协议也是一种私有协议,他们都是应用层协议,基于tcp或udp设计。
通常应用层协议都是基于tcp和udp,可靠传输通常使用tcp,如大多数的基础组件,如redis、mysql。只有能容忍丢失且需要很高的性能时使用udp协议,比如metric上报等场景。
这里介绍几种基于tcp的应用协议。
redis协议
redis协议足够简单,所以先介绍一下。redis协议基于tcp设计,客户端和服务器发送的命令一律使用\r\n
(CRLF)结尾。他的格式如下
*<参数数量> CRLF
$<参数1 字节数量> CRLF
<参数1的数据> CRLF
...
$<参数n 字节数量> CRLF
<参数n的数据> CRLF
举个例子,client向server端发送命令 set mykey myvalue
*3 CRLF
$3 CRLF
SET CRLF
$5 CRLF
mykey CRLF
$7 CRLF
myvalue CRLF
也就是 *3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n
关于redis协议更详细信息可以看这个链接:
h