将 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

WebSocket 身份验证安全性

Java开发之使用websocket实现web客户端与服务器之间的实时通讯

java socket怎么与websocket对接

关于 websocket 的说明