有一个Vaadin 23教程,它展示了如何向所有用户(广播) https://vaadin.com/docs/latest/advanced/server-push发送消息,但是如果我只需要向另一个特定用户发送推送消息呢?是否有可能使用服务器推送和Vaadin,如果是的话-怎么做?例如,Admin用户为另一个用户更新了一些内容,并希望立即通知该用户。
更新
根据答复和评论,我将广播公司的例子更新如下:
public class Broadcaster {
static Executor executor = Executors.newSingleThreadExecutor();
static Map<String, List<Consumer<String>>> listeners = new ConcurrentHashMap<>();
public static synchronized Registration register(String userUuid, Consumer<String> listener) {
addListener(userUuid, listener);
return () -> {
synchronized (Broadcaster.class) {
listeners.remove(listener);
}
};
}
private static synchronized void addListener(String userUuid, Consumer<String> listener) {
List<Consumer<String>> consumers = listeners.get(userUuid);
if (consumers == null) {
consumers = new LinkedList<>();
}
consumers.add(listener);
listeners.put(userUuid, consumers);
}
public static synchronized void broadcast(String userUuid, String message) {
List<Consumer<String>> consumers = listeners.get(userUuid);
if (CollectionUtils.isNotEmpty(consumers)) {
for (Consumer<String> consumer : consumers) {
executor.execute(() -> consumer.accept(message));
}
}
}
}如果我想将消息推送给特定用户的侦听器,这种实现会正常工作吗?
发布于 2022-09-25 16:34:17
你需要一些PubSub就位。一般情况下,Push对分发事件或您所做的操作都是不可知论的。它只允许服务器通知客户端的频带外。什么意味着你使用这些功能,这取决于你自己。
例如,每个客户端都可以在会话时向pub-sub注册他们的用户名或-group (或一般的主题),稍后一些管理员会向目标发布通知。只有登记在该目标上的客户才会做出反应,例如推。
穷人版本将是所有客户端都在监听相同的消息流,但只有当它们被提到为目标时才会做出反应。这很可能不那么有效。
https://stackoverflow.com/questions/73845965
复制相似问题