【发布时间】:2020-05-26 02:43:33
【问题描述】:
我想通过不断查询数据库将实时通知(登录用户的 DTO 对象)推送到客户端。我正在使用服务器端事件来实现相同的目的。但是,我在实现这一目标方面面临一些问题。我在 javascript 中使用 EventSource API。
- 在无限循环中轮询
由于我的数据位于数据库中,我经常需要运行查询以获取最新条目并使用executor.execute(()->{ while(true) {emitter.send(data)} } Thread.sleep(5000)) 直到用户注销。 (a) 在无限循环中查询数据库和 (b) 创建新的 ExecutorService 对象导致 JDBC 池耗尽异常并最终冻结应用程序。
-
使用弹簧启动@Scheduled
这也不起作用,因为我需要登录 user_id,我无法使用
SpringContextHolder.getAuthentication进入 @Scheduled 注释方法,因为此 Cron 不是由用户启动的。
我在这里选择 SSE 而不是 Web Sockets 是不是做错了,或者有什么办法可以为这个特定的用例实现服务器端?
请帮助/指导我。
【问题讨论】:
标签: java spring-boot websocket push-notification server-sent-events