如何从Python客户端订阅websocket用户队列?

时间:2018-06-14 11:59:14

标签: java python spring-boot websocket

我想创建一个服务,其中Python客户端可以订阅spring-boot服务的websocket上的用户队列。网上有几种资源,但这些资源都集中在

  • 使用 JavaScript 客户端(SockJS)客户端而非 Python 客户端进行连接,或
  • 连接主题而非用户队列

我找到了以下资源:

  • Spring-boot 2.0.2允许创建一个简单的websocket服务器。本文介绍如何发布到主题(@SendTo注释)。 Spring Websockets

  • Baeldung的这篇文章介绍了如何创建用户队列的订阅(@SendToUser注释)。 Baeldung Websockets

我发现websocket-client和websockets是最近活跃的Python模块,但手册没有解释订阅用户队列。

是否有一个如何从Python客户端连接到用户队列的示例?

示例websocket服务器

Spring配置:

@Configuration
@EnableWebSocketMessageBroker
public class ClientWebsocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer
{
    @Override
    public void configureMessageBroker(@NotNull MessageBrokerRegistry aMessageBrokerRegistry)
    {
        aMessageBrokerRegistry.enableSimpleBroker("/queue", "/user");
        aMessageBrokerRegistry.setApplicationDestinationPrefixes("/app");
        aMessageBrokerRegistry.setUserDestinationPrefix("/user");
    }

    @Override
    public void registerStompEndpoints(@NotNull StompEndpointRegistry aStompEndpointRegistry)
    {
        aStompEndpointRegistry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
    }
}

控制器:

@Controller
public class SubscriptionController
{
    @NotNull
    @MessageMapping("/subscribe")
    @SendToUser("/queue/reply")
    public ReplyMessage processSubscribeFromClient(
        @Payload Object object,
        Principal principal)
    {
        return new ReplyMessage("Hello World");
    }
}

消息:

class ReplyMessage
{
    @Nullable private String content;

    public ReplyMessage()
    {

    }

    public ReplyMessage(@Nullable String content)
    {
        this.content = content;
    }

    @Nullable
    public String getContent()
    {
        return content;
    }
}

0 个答案:

没有答案