メモリストア + Redis Pub/Sub イベントストア
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() {
// --- Redis イベント伝播の設定 ---
Config redissonCfg = new Config();
redissonCfg.useSingleServer()
.setAddress("redis://127.0.0.1:6379"); // DragonflyDB / Valkey も利用可能
RedissonClient redisson = Redisson.create(redissonCfg);
// イベントストア → Redis の pub/sub
RedisPubSubEventStore eventStore =
new RedisPubSubEventStore(redisson, redisson, null, null);
// ストアファクトリ → メモリセッションストア + Redis イベント伝播
MemoryStoreFactory storeFactory = new MemoryStoreFactory(eventStore);
// --- Socket.IO サーバ設定 ---
Configuration config = new Configuration();
config.setHostname("0.0.0.0");
config.setPort(8080);
config.setStoreFactory(storeFactory);
server = new SocketIOServer(config);
// 任意: リスナー
server.addConnectListener(client -> {
log.info("Client connected: {}", client.getSessionId());
});
server.addDisconnectListener(client -> {
log.info("Client disconnected: {}", client.getSessionId());
});
server.start();
log.info("Socket.IO server started on port 8080");
}
public void stop() {
if (server != null) {
log.info("Stopping server...");
server.stop();
server.getConfiguration().getStoreFactory().shutdown();
}
}
public static void main(String[] args) throws Exception {
Application app = new Application();
app.start();
log.info("Press Enter to stop");
System.in.read();
app.stop();
}
}最終更新
役に立ちましたか?