Java Websockets +事件监听器。 这是正确的方法吗?
我目前正在创build一个将使用Websockets的Java Web应用程序。 服务器将是一个Java类,用@ServerEndpoint
注解,称为Server.java
,客户端将是一个Web浏览器,所以我肯定会使用JavaScript访问Websocket端点。
我需要一个WebSocket,因为我想在服务器发生变化时通知客户端。 我们有一个名为EventManager
的实用程序类,它pipe理在子系统中发生的所有事件。 我打算将Server.java
注册为EventManager
的依赖项,以便每当EventManager
有新的东西时,它都会通知它的所有依赖项这个特定的事件发生了。
这是好的做法吗? 我想过使用AJAX /长轮询,但我相信服务器到客户端的行为需要遵守。 另外,我无法获取数据库中的事件,我不得不依靠EventManager
来通知我的WebSocket端点。
我想要的示例场景:
-
客户端A连接到
Server.java
-
客户端B连接到
Server.java
(到现在Server.java
,将有两个会话处于活动状态) -
EventManager
检测到一个事件并通知Server.java
所有实例。 -
Server.java
发送消息给所有活动的Websocket会话。 -
浏览器使用Javascript检索通过Websocket发送的数据并显示它。
我被告知使用Node.js,但是我仍然在推动Java实现,因为:
- 我完全没有使用Node.js的经验
- 我们的
EventManager
类将很难转换成Node.js的Javascript
它会按照你提出的方式工作。 几点提示:
- 从你的事件pipe理器中删除僵尸服务器(Server.java)。
- 这对单台服务器机器来说可以正常工作,会发生什么情况?
Client A
和Client B
可能连接到不同的http进程。 - 当客户端刷新页面时,您将失去连接
- 您可以使用ServerEndpoint可以接收查询parameter passing状态的事实。
- 连接下降。 记得要实现一个活着。
- 每个websocket只能有一个消息编码器/解码器。 有意义,但在@OnMessage方法中需要一些ifs。
以下是使用websockets的多个服务器的聊天服务器的示例实现 。