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?