v0.1.0

Guia de uso

Instalacion, configuracion y operacion de Velo paso a paso.


Requisitos del sistema

RequisitoVersion minimaNotas
Node.js20.0.0Se requiere soporte de ESM con import ... with { type: 'json' } (Node 22+)
npm9.0.0Solo para leer el package.json; no instala paquetes externos
makeCualquieraOpcional; el Makefile es solo un atajo. Puedes usar node directamente
⚠️
Node.js v22 recomendado La sintaxis import pkg from 'file.json' with { type: 'json' } requiere Node.js 22. En versiones anteriores puede usarse la sintaxis assert, pero esta depreciada.

Instalacion

No hay proceso de instalacion formal. Solo clonar y ejecutar.

bash
# 1. Clonar el repositorio
git clone https://github.com/low-level-js/velo
cd velo

# 2. Verificar la version de Node.js
node --version
# Debe mostrar v20.x.x o superior

# 3. No hay npm install β€” cero dependencias externas
✦
Sin npm install El package.json tiene las secciones dependencies y devDependencies completamente vacias. Velo usa exclusivamente la biblioteca estandar de Node.js.

Iniciar el servidor

El servidor TCP escucha conexiones entrantes y procesa comandos en formato RESP.

bash
# Con Makefile
make server

# Directamente con node
node src/server.js

# Con variables de entorno personalizadas
PORT=7000 LOG_LEVEL=debug node src/server.js

# En modo watch (recarga automatica en desarrollo)
make dev

Al arrancar, el servidor imprime en consola:

output
[velo] servidor iniciado en 127.0.0.1:6380
[velo] bases de datos: 16 | sweep: 1000ms | max conexiones: 100

Apagado limpio

Al recibir SIGTERM o SIGINT (Ctrl+C), el servidor cierra todas las conexiones activas y detiene el sweep antes de terminar.

Cliente REPL interactivo

El cliente abre una sesion interactiva tipo REPL directamente en la terminal.

bash
# Con Makefile (usa HOST y PORT del .env)
make client

# Directamente con node
node src/client.js

# Conectar a un servidor remoto o con puerto personalizado
node src/client.js 192.168.1.10 7000

Prompt dinamico

El prompt muestra el host, puerto y base de datos activa en tiempo real:

repl
velo 127.0.0.1:6380[0]>   ← base de datos 0

velo 127.0.0.1:6380[0]> SELECT 3
OK

velo 127.0.0.1:6380[3]>   ← cambio automatico a db 3

Colores por tipo de respuesta

ColorTipo de respuestaEjemplo
VerdeSimple String (exito)OK, PONG
CyanBulk String (valor)"joel"
AmarilloInteger(integer) 42
GrisNil (sin valor)(nil)
RojoError(error) ERR ...

Comandos locales

Estos comandos son procesados por el cliente y no se envian al servidor:

ComandoAccion
exit / quitCierra la conexion y termina el cliente
clearLimpia la pantalla de la terminal

Historial

El cliente guarda hasta 200 entradas de historial. Navega con las teclas ↑ y ↓.

Configuracion β€” archivo .env

Todas las opciones del servidor se configuran en el archivo .env en la raiz del proyecto.

.env
HOST=127.0.0.1
PORT=6380
MAX_CONNECTIONS=100
LOG_LEVEL=info
DB_COUNT=16
SWEEP_INTERVAL_MS=1000
VariableDefectoDescripcion
HOST127.0.0.1 Host en el que escucha el servidor TCP. Usa 0.0.0.0 para aceptar conexiones externas.
PORT6380 Puerto TCP del servidor. Cambiarlo evita conflictos con otros servicios locales.
MAX_CONNECTIONS100 Maximo de conexiones simultaneas. Las conexiones que superen el limite reciben un error y se cierran.
LOG_LEVELinfo Nivel de verbosidad: debug (todo), info (normal), warn, error.
DB_COUNT16 Numero de bases de datos disponibles. El indice va de 0 a DB_COUNT - 1.
SWEEP_INTERVAL_MS1000 Intervalo en milisegundos del sweep de claves expiradas. Reducirlo libera memoria mas rapido a costa de CPU.

Prioridad de configuracion

Las variables de entorno del sistema operativo tienen prioridad sobre el archivo .env:

bash
# Esta variable sobreescribe lo que diga el .env
PORT=7000 LOG_LEVEL=debug node src/server.js

Makefile β€” comandos de desarrollo

ComandoDescripcion
make serverInicia el servidor TCP con la configuracion del .env
make clientAbre el cliente REPL interactivo
make devInicia el servidor con recarga automatica al guardar (--watch)
make installVerifica la version de Node.js instalada
make cleanElimina archivos temporales y logs generados
make infoMuestra la configuracion activa leida desde el .env
ℹ️
El Makefile carga automaticamente las variables del .env usando include .env con export, por lo que todos los comandos heredan la configuracion sin necesidad de repetirla.

Conectar con netcat o telnet

Velo soporta texto plano (inline) ademas del protocolo RESP, lo que permite probarlo con herramientas de red estandar sin el cliente REPL:

bash
# Usando netcat (nc)
echo -e "PING\r" | nc 127.0.0.1 6380

# Sesion interactiva
nc 127.0.0.1 6380
PING
+PONG
SET nombre joel EX 60
+OK
GET nombre
$4
joel
⚠️
Solo para pruebas El modo inline no soporta todos los tipos de argumentos RESP. Para uso en produccion, usa siempre el cliente REPL o un cliente que hable RESP nativo.