【问题标题】:STOMP Websocket synchronous communication using SpringSTOMP Websocket 使用 Spring 同步通信
【发布时间】:2018-05-29 09:53:41
【问题描述】:

我有一个要求是一些 STOMP websocket 连接需要同步处理。

意思是我有一个客户(spring)订阅了一个主题(“/topic”)。

我有一个服务器(spring),它定义了代理(“/topic”),也定义了处理程序(“/app/hello”)。

现在客户端可以向 /app/hello 发送请求,然后等待响应,然后再向 /app/hello 发送下一个请求。

  1. 如何在我的服务器上返回值(STOMP 规范中提到了 RECEIPT 帧,但我不认为这是可以手动控制的)。
  2. 如何在发送后等待客户端上的值。

【问题讨论】:

  • 您可能已经关注了example on spring.io?我认为您所要求的一切都在示例中。
  • 客户端是网络浏览器(javascript),也是异步的)
  • WebSockets 在设计上是异步的。您想将 Java 客户端连接到 WebSockets 端点吗?
  • 是的。我想要长寿;两者之间的双向连接。这就是我选择 websockets 的原因。
  • 也许你想在 github 上签出这个项目:Spring Boot Websocket Example

标签: java spring stomp spring-websocket


【解决方案1】:

要将 Java 客户端连接到 websocket 端点,您可以使用 tyrus reference implementationJSR356 - Websockets For Java

基本上,您需要实现一个客户端端点 (javax.websocket.Endpoint) 和一个消息处理程序 (javax.websocket.MessageHandler)。在端点中,您在打开的当前会话中注册消息处理程序:

public class ClientEndpoint extends Endpoint {
  ...

  @Override
  public void onOpen(final Session aSession, final EndpointConfig aConfig) {
    aSession.addMessageHandler(yourMessageHandler);
  }
}

要连接到服务器端点,您可以使用ClientManager

final ClientManager clientManager = ClientManager.createClient();
clientManager.connectToServer(clientEndpoint, config, uriToServerEndpoint);

如果服务器端点向主题发送内容,则将调用消息处理程序的 onMessage 方法。

根据您的需要,您可以选择实现上述接口或使用相应的注解。

更新: STOMP website 列出了 STOMP 协议的几个实现。对于 Java,有 GozirraStampy。我没有使用这些框架的经验,但示例非常简单。

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 2016-05-06
    • 2020-06-17
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2017-05-07
    • 2019-04-14
    相关资源
    最近更新 更多