2014-06-06 133 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;