Memcached如何协商协议?

时间:2014-06-06 21:20:00

标签: memcached binary protocols ascii

我知道Memcached可以与客户端协商协议,但我对于服务器使用的协商机制一无所知(在互联网上也找不到任何东西)。有什么想法吗?

2 个答案:

答案 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;