Memcached协议

缘起

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了的

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据