将 java 与 websocket 关联
Posted
技术标签:
【中文标题】将 java 与 websocket 关联【英文标题】:Associate java with websocket 【发布时间】:2021-01-14 12:32:12 【问题描述】:我有几个名为 A、B 和 C 的进程或节点,它们通过套接字在它们之间进行通信。我想在他们通过 websocket 说话时打印他们的状态。
为此,我创建了一个名为WebSocket
的类,并带有必要的@ApplicationScoped
、@ServerEndpoint("/status")
、@OnOpen
、@OnMessage
、@OnClose
和@OnError
标签。每个标签都有其对应的功能。我还创建了一个 TomCat 服务器。
问题是我无法通过 WebSocket
类让我的进程与 TomCat 服务器通信,反之亦然。
执行我的 tomcat 服务器,运行 WebSocket
的实例,其中 Node 的值为 null
,因此获取节点的状态并打印它是不可行的。
反过来,在执行我的节点时,每个节点都会创建一个WebSocket
,但它无法与 Tomcat 通信。
最终结果是我的三个节点运行着三个无法与 tomcat 通信的 WebSocket
实例,而 tomcat 运行着它自己的无法获取节点状态的 WebSocket
实例。
有人可以澄清一下吗:
通信应该采用哪种方式? websockets 是设计用来获取信息还是等到信息发送给他。 如何解决我的问题,最好先创建节点(每个节点都有自己的WebSocket
)和等待发送信息的 tomcat 服务器。
为了显示屏幕,我制作了一个小的 .html 文件 (http://localhost:63343/test/web/index.html),但 tomcat 有一个在运行时打开的文件 (http://localhost:8080/test_war_exploded /)。如果我设法将消息从节点正确发送到 tomcat 服务器,这两个网站中的哪一个会收到消息? AKA 哪个有效?
编辑:
我刚刚测试了执行 Tomcat 服务器和几个套接字。每个套接字执行一个新的WebSocket
,然后我可以根据WebSocket
的参数执行不同的节点。
这不是一个选项。它可能有效,但在我的情况下,所有节点都必须是单独的程序,这样做意味着它们都是同一个程序,但只是在不同的线程下。
【问题讨论】:
【参考方案1】:我发现了问题。客户端需要它自己的类来与不存在的服务器进行通信。 WebSocket
类被Tomcat服务器使用,客户端不应该使用它,需要一个新的。
请关注 this tutorial 以获得一个很好的例子。
就我而言,它让我理解了我的设计错误。我在ContainerProvider
上收到了Could not find an implementation class
异常,但这是另一回事。
【讨论】:
以上是关于将 java 与 websocket 关联的主要内容,如果未能解决你的问题,请参考以下文章
websocket通信 实现java模拟一个client与webclient通信
在spring中获取websocket会话的关联HTTPSession