2014-06-06 97 views
1

我知道Memcached可以与客户端协商协议,但我对服务器使用的协商机制一无所知(在因特网上都找不到任何东西)。任何想法?Memcached如何协商协议?

+0

我真的觉得这是serverfault代替计算器的问题。 –

回答

4

正如您在中所看到的,它都基于服务器接收到的第一个字节。如果它是一个神奇的请求字节(0x80),那么它认为客户端尝试使用二进制协议,否则它将使用ascii协议。

+0

感谢您的回复。我如何测试使用netcat? –

+0

对于ASCII码,我想这很简单,只需使用“echo -e'stats conns \ r \ n'| nc localhost 11211”即可。对于二进制,你可以做同样的事情,但使用像“echo -e'\ x80 ....'| nc ...”,只需读取二进制原型desc。 –

+0

这工作:** echo -e'\ x80'| nc主机端口**非常感谢,很有趣;) –

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;