Java Websockets + 事件监听器。这是正确的方法吗?

标签 java javascript node.js

我目前正在创建一个将使用 Websockets 的 Java Web 应用程序。服务器将是一个用 @ServerEndpoint 注释的 Java 类,称为 Server.java,客户端将是一个网络浏览器,所以我肯定会使用 Javascript 访问 Websocket 端点。

我需要一个 Websocket,因为我想在服务器发生变化时通知客户端。我们有一个名为 EventManager 的实用程序类,它管理子系统中发生的所有事件。我计划将 Server.java 注册为 EventManager 的依赖项,以便每当 EventManager 有新内容时,它都会通知所有依赖项发生了特定事件。

这是好的做法吗?我考虑过使用 AJAX/长轮询,但我相信需要观察服务器到客户端的行为。此外,我无法获取数据库中的事件,我必须依靠 EventManager 来通知我的 Websocket 端点。

我想要的示例场景:

  1. 客户端 A 连接到 Server.java

  2. 客户端 B 连接到 Server.java(此时,将有两个 Activity session )

  3. EventManager 检测事件并通知 Server.java 的所有实例。

  4. Server.java 向所有 Activity 的 Websocket session 发送一条消息。

  5. 浏览器使用 Javascript 检索通过 Websocket 发送的数据并显示它。

我被告知为此使用 Node.js,但我仍在插入 Java 实现,因为:

  1. 我完全没有使用 Node.js 的经验
  2. 我们的 EventManager 类很难转换成 用于 Node.js 的 Javascript

最佳答案

它将按照您建议的方式工作。一些提示:

  • 从您的事件管理器中删除僵尸服务器 (Server.java)。
  • 这在单台服务器机器上运行良好,如果有更多服务器机器会怎样? Client AClient B 可能连接到不同的 http 进程。
  • 当客户端刷新页面时,您将失去连接
  • 您可以利用 ServerEndpoint 可以接收查询参数来传递状态这一事实。
  • 连接中断。记得实现保活。
  • 每个 websocket 只能有一个消息编码器/解码器。有道理,但在 @OnMessage 方法中需要一些 ifs。

这是一个sample implementation使用 websockets 的具有多个服务器的聊天服务器。

关于Java Websockets + 事件监听器。这是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043888/

相关文章:

java - Android 中的 drawRoundRect 不工作

java - 将许多第 3 方 jar 包含到一个简单的 spring boot 项目时会发生错误

javascript - 使用多个 JSON Api URL

java - 通过 POST 将图像从 Python 发送到 NodeJS + Express

java - 如何使用 replaceAll 函数过滤掉双引号

java - 如何将 int 值与多个字符串值进行比较。所以它适用于数据库。值(value)转化失败

javascript - 无法使用本地存储设置变量

javascript - 设置子元素宽度为父div

javascript - 根据 Adonis.js 中数据库的结果更改 HTML 标签

javascript - JS : Node. js 和 Socket.io - 全局变量和架构