我正在使用这个进行 socketio 设置。我有 2 个不同的 socketio 服务器(比如说 server1 和 server2)在集群中运行,使用RedissonStoreFactory
我的问题是,如果任何客户端与 server1 连接,则 server2 没有连接客户端的信息。IE。如果 2 个客户端与 server1 连接并且如果我server.getAllClients()
在 server2 上执行,它将返回空列表而不是具有 2 个计数的列表。
这是我在两台不同机器上运行的代码。
@SpringBootApplication
public class Application {
private static final Logger LOGGER = Logger.getLogger(Application.class);
@Value("${test.socketio.hostName}")
private String socketIOHostName;
@Value("${test.socketio.port}")
private Integer socketIOport;
@Value("${test.dedisson.redissonAddress}")
private String redissonAddress;
@Autowired
private RedissonClient redissonClient;
@Bean
public SocketIOServer socketIOServer() {
LOGGER.info("Socket server starting on host=" + socketIOHostName + ", port=" + socketIOport);
Configuration config = new Configuration();
config.setHostname(socketIOHostName);
config.setPort(socketIOport);
StoreFactory redissonStoreFactory = new RedissonStoreFactory(redissonClient);
config.setStoreFactory(redissonStoreFactory);
SocketIOServer server = new SocketIOServer(config);
server.start();
LOGGER.info( "Socket server started");
return server;
}
/**
*
* @return
*/
@Bean
public RedissonClient getRedissonClient(){
LOGGER.info("creatting redisson client on redissonAddress="+redissonAddress);
Config config = new Config();
config.useSingleServer().setAddress(redissonAddress);
RedissonClient redisson = Redisson.create(config);
LOGGER.info("redisson client connected");
return redisson;
}
public Application() {
//Nothing to be done here
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
@Bean
public SpringAnnotationScanner springAnnotationScanner(SocketIOServer ssrv) {
return new SpringAnnotationScanner(ssrv);
}
}
我更喜欢 2 个实例用于故障转移条件。如果 server1 关闭,则 server2 会将通知发送到连接的客户端,但在我的情况下,server2 不知道与 server1 连接的客户端。