gpt4 book ai didi

java - 是否建议使用 Server Sent Events 通过持续查询数据库来推送通知?

转载 作者:行者123 更新时间:2023-12-04 13:57:03 24 4
gpt4 key购买 nike

我想通过不断查询数据库将实时通知(登录用户的 DTO 对象)推送到客户端。我正在使用服务器端事件来实现相同的目的。但是,我在实现这一目标时面临的问题很少。我在 javascript 中使用 EventSource API。

  • 在无限循环内轮询

  • 由于我的数据位于数据库中,因此我经常需要运行查询以获取最新条目并使用 executor.execute(()->{ while(true) {emitter.send(data)} } Thread.sleep(5000))直到用户退出。 (a) 在无限循环中查询数据库和 (b) 创建新的 ExecutorService 对象会导致 JDBC 池耗尽异常并最终卡住应用程序。
  • 使用 Spring 启动 @Scheduled
    这也不起作用,因为我需要登录 user_id,我无法使用 SpringContextHolder.getAuthentication 进入 @Scheduled 注释方法中因为这个 Cron 不是由用户启动的。

  • 我在这里选择 SSE 而不是 Web Sockets 是不是做错了,或者有什么方法可以为这个特定用例实现服务器端?

    请帮助/指导我。

    最佳答案

    如果您想将事件推送到您的客户端,您最好在后端也有事件概念,而不是轮询。如果你想轮询你的数据库,你最好让客户端来做。 SSE 或 websocket 在该决定中无关紧要。

    CDI 事件可能是满足您需求的合适解决方案。

  • 创建 EntityForLoggedInUsersChanged事件类。
  • 注入(inject) Event<EntityForLoggedInUsersChanged>在您的服务中更改与登录用户相关的实体。当他们这样做时触发事件。
  • 创建一个服务,将 @Observe那些事件,构造你要推送的dto,获取到相关用户的 channel ,然后推送。
  • 关于java - 是否建议使用 Server Sent Events 通过持续查询数据库来推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60156197/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com