Nyx con Ejemplos

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.

← Anterior Siguiente →

Source: examples/by-example/71-kv-basic.nx