缘起
Memcache 协议我们经常见到和用到的基本是基于tcp的文本协议了,如:
但是该文本协议无法直接套用到udp上,如:
但是,我们可以通过如下方式使用udp协议:(参考资料: http://www.cnblogs.com/kevintian/articles/1197681.html )
首先,从数据上来看,既有二进制的数据,也有文本的数据; 从协议上来看,是UDP的,这应该算是文本协议for udp;
官方资料: https://github.com/memcached/memcached/blob/master/doc/protocol.txt (页面中搜udp)
tcp不支持该写法:
二进制协议
对于memcached的二进制协议: https://code.google.com/p/memcached/wiki/BinaryProtocolRevamped
但是,对于UDP而言,目前Memcached还不支持多个数据包的UDP请求的
总结
文本协议: https://github.com/memcached/memcached/blob/master/doc/protocol.txt
二进制协议: https://code.google.com/p/memcached/wiki/BinaryProtocolRevamped
阅读memcached的源代码得知: 文本协议和二进制协议都可以用于tcp或udp
对于UDP而言,在上述协议的基础上 添加了8字节的udp header,文本协议和二进制协议都如此; 于是导致了文本协议在udp传输时携带了部分非文本的数据
参看: memcached.c 中的 drive_machine() ; 对于udp而言,是在 try_read_udp(conn *c) 时处理完了 8字节的udp头后返回协议数据的,然后 try_read_command(conn *c) 中判断是否二进制协议时,已经是去掉了udp的8字节header了的