Almacén en memoria + Pub/Sub de Redis Almacén de eventos

import com.socketio4j.socketio.Configuration;
import com.socketio4j.socketio.SocketIOServer;
import com.socketio4j.socketio.store.memory.MemoryStoreFactory;
import com.socketio4j.socketio.store.redis_pubsub.RedisPubSubEventStore;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

public class Application {

    private SocketIOServer server;

    public void start() {
        // --- Configuración de propagación de eventos Redis ---
        Config redissonCfg = new Config();
        redissonCfg.useSingleServer()
                .setAddress("redis://127.0.0.1:6379"); // DragonflyDB / Valkey también funciona

        RedissonClient redisson = Redisson.create(redissonCfg);

        // almacén de eventos → redis pub/sub
        RedisPubSubEventStore eventStore =
                new RedisPubSubEventStore(redisson, redisson, null, null);

        // fábrica de almacenes → almacén de sesiones en memoria + propagación de eventos por Redis
        MemoryStoreFactory storeFactory = new MemoryStoreFactory(eventStore);

        // --- Configuración del servidor Socket.IO ---
        Configuration config = new Configuration();
        config.setHostname("0.0.0.0");
        config.setPort(8080);
        config.setStoreFactory(storeFactory);

        server = new SocketIOServer(config);

        // opcional: listeners
        server.addConnectListener(client -> {
            log.info("Cliente conectado: {}", client.getSessionId());
        });

        server.addDisconnectListener(client -> {
            log.info("Cliente desconectado: {}", client.getSessionId());
        });

        server.start();
        log.info("Servidor Socket.IO iniciado en el puerto 8080");
    }

    public void stop() {
        if (server != null) {
            log.info("Deteniendo el servidor...");
            server.stop();
            server.getConfiguration().getStoreFactory().shutdown();
        }
    }

    public static void main(String[] args) throws Exception {
        Application app = new Application();
        app.start();
        log.info("Presione Enter para detener");
        System.in.read();
        app.stop();
    }
}

Última actualización

¿Te fue útil?