Cliente básico de nyx-kv
El servidor nyx-kv habla el protocolo RESP en el puerto 6380. Esta receta muestra cómo construir un cliente básico que se conecta, emite comandos SET/GET/DEL, y lee las respuestas.
Código
// nyx-kv client -- basic SET/GET/DEL operations
// Build a RESP array command from string parts
fn resp_cmd(parts: Array) -> String {
var sb: StringBuilder = StringBuilder.new()
sb.append("*")
sb.append(int_to_string(parts.length()))
sb.append("\r\n")
var i: int = 0
while i < parts.length() {
let p: String = parts[i]
sb.append("$")
sb.append(int_to_string(p.length()))
sb.append("\r\n")
sb.append(p)
sb.append("\r\n")
i = i + 1
}
return sb.to_string()
}
fn main() -> int {
// Connect to nyx-kv on default port 6380
let fd: int = tcp_connect("127.0.0.1", 6380)
if fd < 0 {
print("connection failed (is nyx-kv running?)")
return 1
}
// SET name "Nyx"
tcp_write(fd, resp_cmd(["SET", "name", "Nyx"]))
let set_reply: String = tcp_read_line(fd)
print("SET -> " + set_reply.trim())
// GET name
tcp_write(fd, resp_cmd(["GET", "name"]))
let hdr: String = tcp_read_line(fd)
let val: String = tcp_read_line(fd)
print("GET name -> " + val.trim())
// DEL name
tcp_write(fd, resp_cmd(["DEL", "name"]))
let del_reply: String = tcp_read_line(fd)
print("DEL -> " + del_reply.trim())
tcp_close(fd)
return 0
}
Salida
SET -> +OK GET name -> Nyx DEL -> :1
Explicación
RESP (REdis Serialization Protocol) codifica cada comando como un array de bulk strings: *N\r\n anuncia un array de N elementos, y luego cada elemento es $len\r\n<data>\r\n. El helper resp_cmd construye este formato de cable con un StringBuilder, evitando concatenaciones de strings costosas.
Las respuestas vienen en cuatro variantes: simple strings (+OK), errores (-ERR), enteros (:1), y bulk strings ($3\r\nNyx\r\n). Para GET leemos dos líneas: el encabezado de longitud y el valor. Para SET y DEL leemos solo una línea. El servidor mantiene estado a lo largo de una única conexión TCP, así que hay que mantener el socket abierto mientras se emiten comandos.
Como nyx-kv es compatible con Redis, también se puede probar con redis-cli -p 6380 — los mismos bytes RESP viajan por el cable.