java - 从服务器向所有客户端发送消息

标签 java spring spring-mvc model-view-controller polling

我知道我没有任何代码可以向你们展示,我在某个时刻陷入困境,不知道从哪里开始。我希望有人能帮助我。

我正在开发一个 Spring MVC 应用程序,我需要向所有 Activity session 用户发送一条消息来执行一个脚本,该脚本可供所有客户端使用,因为它在 js 文件中定义并包含在每个用户中。

我环顾四周,发现一些框架提供了这些类型的功能,例如 Atmosphere,但我认为它不应该在我的情况下使用,因为它是一个大框架,所需的功能很少。我也彻底了解了 WebSockets,但我找不到任何可以帮助我在客户端为所有客户端调用脚本的东西。

如果有人可以帮助我走上正确的道路或指导我找到类似的例子。我将不胜感激

****更新**** 如果有这样的方法,我也可以使用轮询:如果 Controller 收到请求,则 session 在此期间应被视为空闲,例如,有一个 Controller 每 5 分钟调用一次, session 中的超时时间为 30 分钟。如果用于轮询的 Controller 每 5 分钟调用一次,则 session 此时不会过期,我需要从计算空闲时间中排除特定 Controller

最佳答案

无轮询解决方案: 据我所知,您需要一个远程过程调用机制。 我会选择https://github.com/eriksank/rpc-websocket 。 总体思路:

  1. 您的客户端将自己作为“消费者”注册到您的服务器进程。
  2. 当消息准备好时,您的服务器会遍历每个注册的“消费者”并发送 rpc-websocket 的消息。可以处理。

轮询解决方案: 这是一个总体思路,如果您已注册、登录用户,则适用。

  1. 有一个存储消息的数据库表,我们将其称为“消息”。
  2. 有一个用于跟踪消息和用户的数据库表,我们将其称为“message_tracker”。如果用户已查看消息,则此表中将有一行用于 messageId 和 UserID。
  3. 使用 JavaScript 脚本轮询服务器 URL 以查找新消息。可以根据上面的数据库表来决定什么是新消息。
  4. 如果发现新消息,对其进行处理,然后调用另一个服务器 URL,该 URL 会插入到 message_tracker 数据库表中

关于java - 从服务器向所有客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39784427/

相关文章:

java - Spring Hibernate 类映射问题

mysql - 如何在JPA中的db中保存对象后获取id?

java - Spring Data JPA - 不带参数的查询

java - Spring + JAX.RS - 上下文加载两次

java - Spring 没有匹配类型的 bean,预计至少有 1 个 bean

java - 生成带有 svg 内容的图标

Java 将日期转换为其他格式

java - 如何在没有 SAML 的情况下在多个 Spring Security Web 应用程序上使用 SSO?

Java JPanel 移动(keylistener)不工作

java - Spring-Data-Redis 与 Jedis putIfAbsent 用于分布式锁 - 不正确的行为