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

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

我目前正在创建一个使用WebSocket的Java Web应用程序。服务器将是一个用
@ServerEndpoint
注释的Java类,称为
server.Java
,客户端将是一个web浏览器,因此我将使用Javascript访问Websocket端点

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

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

我想要的示例场景:

  • 客户端A连接到
    Server.java

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

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

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

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

  • 我被告知要使用Node.js实现这一点,但我仍在推动Java实现,因为:

  • 我对Node.js完全没有经验
  • 我们的
    EventManager
    类转换成 Node.js的Javascript

  • 它将按你提议的方式工作。几点建议:

    • 从事件管理器中删除僵尸服务器(Server.java)
    • 这在单服务器机器上可以正常工作,但在多服务器机器上会发生什么<代码>客户端A
      客户端B
      可以连接到不同的http进程
    • 当客户端刷新页面时,您将失去连接
    • 您可以使用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
    实例的所有引用。