7

我在 MySQL 应用程序上有一个 Spring MVC、Spring Thymeleaf、Spring Security 和 Hibernate。我的任务是通知所有当前登录的用户,如果他们正在查看的页面有新数据,以便用户可以刷新并获取一组新数据。

我猜我可以将所有登录的用户存储在 ApplicationScope 会话中,然后以某种方式通知他们。但我以前从未这样做过,也不知道它有多安全。

任何人都可以就如何做到这一点提出任何想法吗?

4

2 回答 2

3

您需要推/拉架构(以启动从服务器端发送消息)。您使用的所有 Spring 框架都无法做到这一点。查看气氛https://github.com/Atmosphere/atmosphere

然后,每当新数据被持久化(您的 DAO 层可以触发此操作)时,您只需通过 Atmosphere servlet 将新消息推送给所有订阅用户。Atmosphere 使用“频道”,因此您可以为用户所在的页面使用预定义的频道名称,所有用户都会收到消息。您还可以使用 Spring 安全性保护 Atmosphere servlet,因此未经身份验证的用户将无法获得通知。

于 2013-01-31T21:13:27.957 回答
1

根据上述评论,您可以使用以下方式实现拉取架构:

将所有事件存储在一个中央位置,可供所有会话(单例、数据库等)访问。确保有一个顺序 ID。

存储在会话中检索到的最新事件 ID。根据需要,查询 ID 大于会话中存储的最新 ID 的事件。

希望这可以帮助。

于 2013-01-31T15:23:41.647 回答