Java Websockets+;事件侦听器。这是正确的方法吗?
我目前正在创建一个使用WebSocket的Java Web应用程序。服务器将是一个用Java Websockets+;事件侦听器。这是正确的方法吗?,java,javascript,node.js,Java,Javascript,Node.js,我目前正在创建一个使用WebSocket的Java Web应用程序。服务器将是一个用@ServerEndpoint注释的Java类,称为server.Java,客户端将是一个web浏览器,因此我将使用Javascript访问Websocket端点 我需要一个Websocket,因为我想在服务器中发生更改时通知客户端。我们有一个名为EventManager的实用程序类,它管理子系统中发生的所有事件。我计划将Server.java注册为EventManager的依赖项,这样每当EventManage
@ServerEndpoint
注释的Java类,称为server.Java
,客户端将是一个web浏览器,因此我将使用Javascript访问Websocket端点
我需要一个Websocket,因为我想在服务器中发生更改时通知客户端。我们有一个名为EventManager
的实用程序类,它管理子系统中发生的所有事件。我计划将Server.java
注册为EventManager
的依赖项,这样每当EventManager
有新内容时,它都会通知其所有依赖项此特定事件已发生
这是好的做法吗?我曾考虑过使用AJAX/长轮询,但我认为需要观察服务器到客户端的行为。此外,我无法获取数据库中的事件,我必须依靠EventManager
来通知我的Websocket端点
我想要的示例场景:
Server.java
Server.java
(现在,将有两个会话处于活动状态)EventManager
检测事件并通知Server.java的所有实例
Server.java
向所有活动的Websocket会话发送消息EventManager
类转换成
Node.js的Javascript它将按你提议的方式工作。几点建议:
- 从事件管理器中删除僵尸服务器(Server.java)
- 这在单服务器机器上可以正常工作,但在多服务器机器上会发生什么<代码>客户端A和
可以连接到不同的http进程客户端B
- 当客户端刷新页面时,您将失去连接
- 您可以使用ServerEndpoint可以接收查询参数以传递状态这一事实
- 连接断开。记住要实现一个保持活动状态
- 每个websocket只能有一个消息编码器/解码器。有道理,但是@OnMessage方法中需要一些if李>
下面是一个聊天服务器的示例,其中有多个服务器使用WebSocket。如果您正在寻找Java答案,为什么要用node.js标记它?我们,node.js的人帮不了你一点忙。我只是想你们中的一些人可能也有意见。我真的不确定我的Java方法是否完全有效,在这种情况下,我可能会求助于Node.js作为最坏的场景是的,我将只使用一个Server.Java,但两个不同的Websocket connect请求不会创建两个不同的Server.Java实例吗?哦,我明白了-感谢您的输入!特别是关于keep alive部分:)还有最后一件事——您说过要从EventManager中删除zombie Server.javas。这是否意味着一旦Websocket连接关闭,就将其从从属关系列表中删除?是的,请确保在连接关闭或丢失后删除对
YourServer
实例的所有引用。