提问者:小点点

使用Spring的STOMP Websocket同步通信


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

这意味着我有一个客户端(Spring)订阅了一个主题(“/topic”)。

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

现在,客户端是否可以向 /app/hello发送请求,然后在向 /app/hello.发送下一个请求之前等待响应

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

共1个答案

匿名用户

要将Java客户端连接到websocketendpoint,可以使用JSR356-Websocket ForJava的tyrus参考实现。

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

public class ClientEndpoint extends Endpoint {
  ...

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

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

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

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

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

更新:STOMP网站列出了STOMP协议的几种实现。Java有Gozirra和Stampy。我没有使用这些框架的经验,但示例非常简单。