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

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

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

这是好的做法吗? 我想过使用AJAX /长轮询,但我相信服务器到客户端的行为需要遵守。 另外,我无法获取数据库中的事件,我不得不依靠EventManager来通知我的WebSocket端点。

我想要的示例场景:

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

  2. 客户端B连接到Server.java (到现在Server.java ,将有两个会话处于活动状态)

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

  4. Server.java发送消息给所有活动的Websocket会话。

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

我被告知使用Node.js,但是我仍然在推动Java实现,因为:

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

它会按照你提出的方式工作。 几点提示:

  • 从你的事件pipe理器中删除僵尸服务器(Server.java)。
  • 这对单台服务器机器来说可以正常工作,会发生什么情况? Client AClient B可能连接到不同的http进程。
  • 当客户端刷新页面时,您将失去连接
  • 您可以使用ServerEndpoint可以接收查询parameter passing状态的事实。
  • 连接下降。 记得要实现一个活着。
  • 每个websocket只能有一个消息编码器/解码器。 有意义,但在@OnMessage方法中需要一些ifs。

以下是使用websockets的多个服务器的聊天服务器的示例实现 。