我知道Memcached可以与客户端协商协议,但我对服务器使用的协商机制一无所知(在因特网上都找不到任何东西)。任何想法?Memcached如何协商协议?
回答
正如您在中所看到的,它都基于服务器接收到的第一个字节。如果它是一个神奇的请求字节(0x80),那么它认为客户端尝试使用二进制协议,否则它将使用ascii协议。
感谢您的回复。我如何测试使用netcat? –
对于ASCII码,我想这很简单,只需使用“echo -e'stats conns \ r \ n'| nc localhost 11211”即可。对于二进制,你可以做同样的事情,但使用像“echo -e'\ x80 ....'| nc ...”,只需读取二进制原型desc。 –
这工作:** echo -e'\ x80'| nc主机端口**非常感谢,很有趣;) –
在功能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;
- 1. Lua memcached二进制协议
- 2. php,memcached,二进制协议
- 3. 带选项协商的TFTP协议
- 4. 协议的哈希协议
- 5. WebDav协议VS HTTP协议
- 6. 是基于现有协议的协议还是协议?
- 7. 如何正确防止memcached“协议注入”?
- 8. Swift协议专用通用协议
- 9. uwsgi协议比http协议更快吗?
- 10. Firebase XMPP协议与HTTP协议
- 11. Swift协议和协议扩展与CollectionType
- 12. 符合其他协议绑定协议
- 13. 在UDP协议中的Tracerouting协议
- 14. 二进制协议与文本协议
- 15. 必须协议符合NSObject协议?
- 16. 协议内的Objective-C协议
- 17. 在ObjC协议上的协议扩展
- 18. Objective-C协议疯狂 - 如何基于协议返回对象?
- 19. 如何将Clojure协议扩展到其他协议?
- 20. 如何使用UDP协议使SIP协议更可靠
- 21. 协议缓冲如何与传统协议代码交互
- 22. 如何确定在使用sslvSSLv23时协商哪个TLS/SSL协议?
- 23. 如何应对telnet协商
- 24. 如何实现协议
- 25. NTP协议如何工作?
- 26. 如何声明在协议
- 27. I2C协议如何工作
- 28. 如何使用ICE协议
- 29. 如何检查协议
- 30. 如何替换协议geoext.form.formpanel
我真的觉得这是serverfault代替计算器的问题。 –