Tenho o seguinte código para ler uma solicitação de rede:
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);
}
Isso funciona conforme esperado para solicitação http.
Mas para uma solicitação redis, como 'redis-cli PING', ele não é capaz de ler e atinge o tempo limite.
Que erro estou cometendo?
O Redis usa um protocolo chamado RESP (REdis Serialization Protocol), que é um protocolo binário seguro projetado para serializar estruturas de dados. Não é apenas texto simples como HTTP, portanto, simplesmente ler linhas de um fluxo TCP nem sempre funcionará corretamente para comandos Redis.
por favor, veja: https://redis.io/docs/reference/protocol-spec/#:~:text=RESP%20is%20essentially%20a%20serialization,an%20array%20of%20bulk%20strings .