据我了解,您需要向订阅者/客户端广播数据.
以下是我所知道的接近它的一些方法.
>纯Java解决方案,每个客户端都有一个BlockingQueue,每次广播消息时都会将它放在每个队列中.
for(BlockingQueue client: clients){
client.put(msg);
}
> RxJava提供reactive approach.客户将是订阅者,并且您有时间发出消息,订阅者将收到通知,他们可以选择取消订阅
Observable observable = Observable.create(sub->{
String[] msgs = {"msg1","msg2","msg3"};
for (String msg : msgs) {
if(!sub.isUnsubscribed()){
sub.onNext(msg);
}
}
if (!sub.isUnsubscribed()) { // completes
sub.onCompleted();
}
});
现在,多个订阅者可以选择接收消息.
observable.subscribe(System.out::println);
observable.subscribe(System.out::println);
Observable有点功能,他们可以选择他们需要的东西.
observable.filter(msg-> msg.equals("msg2")).map(String::length)
.subscribe(msgLength->{
System.out.println(msgLength); // or do something useful
});