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

时间:2015-05-05 03:42:07

标签: java javascript node.js

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

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

这是好习惯吗?我想过使用AJAX /长轮询,但我认为需要遵守服务器到客户端的行为。此外,我没办法在数据库中获取事件,我必须依靠EventManager来通知我的Websocket端点。

我想要的示例场景:

  1. 客户A连接到Server.java

  2. 客户B连接到Server.java(到目前为止,将有两个会话处于活动状态)

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

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

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

  6. 我被告知要使用Node.js,但我仍在推动Java实现:

    1. 我完全没有使用Node.js
    2. 的经验
    3. 我们的EventManager课程将会变得如此痛苦 Node.js的Javascript

1 个答案:

答案 0 :(得分:3)

它将以您的建议方式运作。一些指示:

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

以下是使用websockets的多个服务器的聊天服务器的sample implementation