Skip to content

paulpwo/sockets_server_rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rust Socket.IO MicroServ

Rust Socket.io Docker

License: AGPL v3 Rust Version Build Status Docker Image

πŸš€ Microservicio de alta performance en Rust con Socket.IO

DiseΓ±ado para manejar miles de conexiones concurrentes con broadcasting en tiempo real


πŸ“‹ Tabla de Contenidos


πŸš€ Inicio RΓ‘pido

# Clona el repositorio
git clone https://github.com/paulpwo/sockets_server_rust.git
cd rust-socketio-microserv

# Compila y ejecuta
cargo run --release

# El servidor estarΓ‘ disponible en http://localhost:3000

πŸ“– DescripciΓ³n

Microservicio WebSocket de alto rendimiento implementado en Rust usando Axum y Socket.IO. DiseΓ±ado para manejar miles de conexiones concurrentes con broadcasting en tiempo real, mΓ©tricas de salud integradas y monitoreo completo del sistema.

✨ Características Principales

  • πŸ”₯ Alto Rendimiento: Implementado en Rust para mΓ‘xima eficiencia
  • 🌐 Socket.IO Compatible: Soporte completo para clientes Socket.IO
  • πŸ“‘ Broadcasting: EnvΓ­o de mensajes a mΓΊltiples canales simultΓ‘neamente
  • πŸ“Š MΓ©tricas Integradas: Endpoints de salud y mΓ©tricas en tiempo real
  • 🐳 Docker Ready: Imagen optimizada multi-stage
  • ⚑ Escalable: DiseΓ±ado para miles de conexiones concurrentes
  • πŸ”’ Seguro: Licencia AGPL-3.0 y mejores prΓ‘cticas de seguridad

πŸ› οΈ Stack TecnolΓ³gico

  • Rust - Lenguaje de sistemas de alto rendimiento
  • Axum - Framework web moderno y rΓ‘pido
  • Socket.IO - ComunicaciΓ³n bidireccional en tiempo real
  • Tokio - Runtime asΓ­ncrono
  • Docker - ContenedorizaciΓ³n

πŸ“¦ InstalaciΓ³n

Requisitos Previos

  • Rust 1.70 o superior
  • Cargo (incluido con Rust)
  • Git

πŸ”§ Pasos de InstalaciΓ³n

  1. Clona el repositorio:

    git clone https://github.com/paulpwo/sockets_server_rust.git
  2. Navega al directorio del proyecto:

    cd rust-socketio-microserv
  3. Compila el proyecto:

    cargo build --release
  4. Ejecuta el servidor:

    cargo run --release

El servidor se iniciarΓ‘ en http://localhost:3000 por defecto.


🐳 Docker

🐳 Uso de Docker

Construye la imagen:

docker build -t rust-socketio-microserv .

Ejecuta el contenedor:

docker run -p 3000:3000 rust-socketio-microserv

Con variables de entorno:

docker run -p 3000:3000 -e PORT=3000 rust-socketio-microserv

βš™οΈ ConfiguraciΓ³n

🌐 Endpoints Disponibles

Endpoint MΓ©todo DescripciΓ³n
/ GET InformaciΓ³n bΓ‘sica del servicio
/health GET Estado de salud del servidor
/metrics GET MΓ©tricas del sistema en JSON
/ws WebSocket ConexiΓ³n WebSocket principal
/SendWebsocketEvent POST Enviar eventos a clientes conectados

πŸ“Š Ejemplo de Uso

Conectar cliente Socket.IO:

const io = require('socket.io-client');
const socket = io('http://localhost:3000');

socket.on('connect', () => {
    console.log('Conectado al servidor');
    socket.emit('message', 'Hola servidor!');
});

socket.on('broadcast', (data) => {
    console.log('Mensaje recibido:', data);
});

Enviar evento via HTTP:

curl -X POST http://localhost:3000/SendWebsocketEvent \
  -H "Content-Type: application/json" \
  -d '{"event": "broadcast", "data": "Mensaje para todos"}'


πŸ§ͺ Pruebas de Carga

πŸ“‹ DescripciΓ³n del Test

El proyecto incluye un cliente de prueba Socket.IO desarrollado en Node.js que permite realizar pruebas de carga exhaustivas para evaluar el rendimiento del servidor bajo diferentes condiciones de estrΓ©s.

πŸš€ ConfiguraciΓ³n RΓ‘pida

1. Instala las dependencias:

cd loadtest
npm install

2. Ejecuta las pruebas:

# Prueba bΓ‘sica (100 conexiones, 10 segundos)
npm test

# Prueba personalizada
npm test -- --connections 500 --duration 30 --interval 100

πŸ“Š ParΓ‘metros de ConfiguraciΓ³n

ParΓ‘metro DescripciΓ³n Valor por Defecto
--connections NΓΊmero de conexiones simultΓ‘neas 100
--duration DuraciΓ³n de la prueba (segundos) 10
--interval Intervalo entre mensajes (ms) 1000
--server URL del servidor http://localhost:3000

πŸ“ˆ InterpretaciΓ³n de MΓ©tricas

Durante la ejecuciΓ³n verΓ‘s mΓ©tricas en tiempo real:

⏱️  1:30 | πŸ”— 500 | πŸ“€ 750 | πŸ“₯ 750 | ❌ 0 | πŸ“Š 8.3 msg/s
  • ⏱️ 1:30: Tiempo transcurrido (minutos:segundos)
  • πŸ”— 500: Conexiones activas
  • πŸ“€ 750: Mensajes enviados
  • πŸ“₯ 750: Mensajes recibidos
  • ❌ 0: Errores de conexiΓ³n
  • πŸ“Š 8.3 msg/s: Throughput actual (mensajes por segundo)

🎯 Casos de Uso Recomendados

# Prueba de estrΓ©s bΓ‘sica
npm test -- --connections 1000 --duration 60

# Prueba de latencia
npm test -- --connections 50 --interval 100 --duration 30

# Prueba de resistencia
npm test -- --connections 500 --duration 300 --interval 2000

πŸ’» Requisitos del Sistema

  • Node.js 14+
  • Servidor Rust ejecutΓ‘ndose en el puerto especificado
  • Memoria suficiente para las conexiones simultΓ‘neas
  • Descriptores de archivo adecuados (ulimit -n)

πŸ—οΈ Arquitectura

πŸ“ Diagrama de Componentes

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Load Balancer β”‚    β”‚   Rust Server   β”‚    β”‚   Monitoring    β”‚
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Nginx    β”‚  │◄──►│  β”‚   Axum    β”‚  │◄──►│  β”‚ Metrics   β”‚  β”‚
β”‚  β”‚  HAProxy  β”‚  β”‚    β”‚  β”‚ Framework β”‚  β”‚    β”‚  β”‚ /health   β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚  β”‚ Socket.IO β”‚  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚  β”‚  Engine   β”‚  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Clients      β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚   System Info   β”‚
β”‚                 β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  │◄──►│  β”‚   Tokio   β”‚  │◄──►│  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Browser   β”‚  β”‚    β”‚  β”‚  Runtime  β”‚  β”‚    β”‚  β”‚    CPU    β”‚  β”‚
β”‚  β”‚ Node.js   β”‚  β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚  β”‚  Memory   β”‚  β”‚
β”‚  β”‚ Mobile    β”‚  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  β”‚  Network  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚                           β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”„ Flujo de Datos

  1. ConexiΓ³n: Cliente se conecta via Socket.IO
  2. AutenticaciΓ³n: ValidaciΓ³n opcional de credenciales
  3. Broadcasting: Mensajes distribuidos a canales especΓ­ficos
  4. MΓ©tricas: RecolecciΓ³n continua de estadΓ­sticas
  5. Monitoreo: Endpoints de salud y mΓ©tricas disponibles

⚑ Características de Rendimiento

  • Conexiones Concurrentes: Hasta 10,000+ conexiones simultΓ‘neas
  • Latencia: < 1ms para mensajes locales
  • Throughput: 50,000+ mensajes/segundo
  • Memoria: ~50MB base + ~1KB por conexiΓ³n
  • CPU: Optimizado para mΓΊltiples cores

☸️ Kubernetes & Producción

🐳 Optimizaciones para Kubernetes

  • Imagen Docker: Multi-stage build para reducir el tamaΓ±o de la imagen final
  • Usuario no-root: El contenedor ejecuta como usuario no-privilegiado para mayor seguridad
  • Resource Limits: Configura lΓ­mites basados en el uso observado:
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 500m
        memory: 512Mi
  • Health Checks: Usa el endpoint /health para readiness y liveness probes
  • Scaling: Soporta escalado horizontal segΓΊn la carga
  • ConfiguraciΓ³n: Usa ConfigMaps para variables de entorno

πŸ“Š Ejemplo de Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rust-socketio-microserv
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rust-socketio-microserv
  template:
    metadata:
      labels:
        app: rust-socketio-microserv
    spec:
      containers:
      - name: server
        image: rust-socketio-microserv:latest
        ports:
        - containerPort: 3000
        env:
        - name: PORT
          value: "3000"
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 5
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 512Mi

🀝 Contribuciones

Β‘Las contribuciones son bienvenidas! Por favor:

  1. Fork el repositorio
  2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -am 'Agrega nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

πŸ“„ Licencia

Este proyecto estΓ‘ licenciado bajo la GNU Affero General Public License v3.0 - ver el archivo LICENSE para mΓ‘s detalles.

πŸ‘¨β€πŸ’» Autor

Paul Werner - @paulpwo


⭐ ‘Si te gusta este proyecto, dale una estrella! ⭐

About

πŸš€ **Microservicio de alta performance en Rust con Socket.IO**

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors