我有以下代码来读取网络请求:
fn handle_connection(mut stream: TcpStream) {
let buf_reader = BufReader::new(&mut stream);
let req: Vec<_> = buf_reader
.lines()
.map(|result| result.unwrap())
.take_while(|line| !line.is_empty())
.collect();
println!("Request: {:#?}", req);
}
这按 http 请求的预期工作。
但是对于 redis 请求,例如“redis-cli PING”,它无法读取并且超时。
我犯了什么错误?
Redis 使用名为 RESP(REdis 序列化协议)的协议,该协议是一种二进制安全协议,旨在序列化数据结构。它不仅仅是像 HTTP 这样的纯文本,因此简单地从 TCP 流中读取行并不总是能够正确地执行 Redis 命令。
请查看: https: //redis.io/docs/reference/protocol-spec/# :~:text=RESP%20is%20essentially%20a%20serialization,an%20array%20of%20bulk %20strings。