首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定其他用户的Vaadin23服务器推送

特定其他用户的Vaadin23服务器推送
EN

Stack Overflow用户
提问于 2022-09-25 16:05:24
回答 1查看 105关注 0票数 0

有一个Vaadin 23教程,它展示了如何向所有用户(广播) https://vaadin.com/docs/latest/advanced/server-push发送消息,但是如果我只需要向另一个特定用户发送推送消息呢?是否有可能使用服务器推送和Vaadin,如果是的话-怎么做?例如,Admin用户为另一个用户更新了一些内容,并希望立即通知该用户。

更新

根据答复和评论,我将广播公司的例子更新如下:

代码语言:javascript
复制
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));
            }
        }
    }

}

如果我想将消息推送给特定用户的侦听器,这种实现会正常工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-25 16:34:17

你需要一些PubSub就位。一般情况下,Push对分发事件或您所做的操作都是不可知论的。它只允许服务器通知客户端的频带外。什么意味着你使用这些功能,这取决于你自己。

例如,每个客户端都可以在会话时向pub-sub注册他们的用户名或-group (或一般的主题),稍后一些管理员会向目标发布通知。只有登记在该目标上的客户才会做出反应,例如推。

穷人版本将是所有客户端都在监听相同的消息流,但只有当它们被提到为目标时才会做出反应。这很可能不那么有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73845965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档