建议通过连续查询数据库使用服务器发送事件来推送通知吗?

问题描述 投票:2回答:2

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

  1. 无限循环内的轮询

由于我的数据位于数据库中,因此我经常需要运行查询以获取最新条目,并使用executor.execute(()->{ while(true) {emitter.send(data)} } Thread.sleep(5000))直到用户注销。 (a)在无限循环中查询数据库,以及(b)创建新的ExecutorService对象导致JDBC池耗尽异常,并最终冻结了应用程序。

  1. 使用SPRING BOOT @Scheduled这也不起作用,因为我需要登录user_id,但我无法使用SpringContextHolder.getAuthentication进入@Scheduled带注释的方法,因为此Cron不是由用户启动的。

我通过选择SSE而不是Web套接字在这里做错了吗,或者对于这种特定用例,有什么方法可以实现服务器端吗?

请帮助/指导我。] >>

我想通过连续查询数据库将实时通知(已登录用户的DTO对象)推送到客户端。我正在使用服务器端事件来实现相同目的。但是,我是...

java spring-boot websocket push-notification server-sent-events
2个回答
0
投票

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


0
投票

令人惊讶的是,这是一个有效的模式。

© www.soinside.com 2019 - 2024. All rights reserved.