我知道Memcached可以与客户端协商协议,但我对于服务器使用的协商机制一无所知(在互联网上也找不到任何东西)。有什么想法吗?
答案 0 :(得分:5)
正如您在source code中看到的那样,它都基于服务器收到的第一个字节。如果它是魔术请求字节(0x80),则它认为客户端尝试使用二进制协议,否则它将使用ascii协议。
答案 1 :(得分:0)
在函数try_read_command:
if ((unsigned char)c->rbuf[0] == (unsigned char)**PROTOCOL_BINARY_REQ**) {
c->protocol = binary_prot;
} else {
c->protocol = ascii_prot;
}
typedef enum {
PROTOCOL_BINARY_REQ = 0x80,
PROTOCOL_BINARY_RES = 0x81
} protocol_binary_magic;