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

Java 如何从Python客户端订阅websocket用户队列?,java,python,spring-boot,websocket,Java,Python,Spring Boot,Websocket,我想创建一个服务,其中Python客户机可以订阅spring boot提供服务的websocket上的用户队列。网上有一些资源,但是这些都集中在 与JavaScript客户端(SockJS)而不是Python客户端连接,或 连接到主题而不是用户队列 我找到了以下资源: SpringBoot2.0.2允许创建一个简单的websocket服务器。本文展示了如何发布到主题(@SendToannotation) Baeldung的这篇文章介绍了如何创建对用户队列的订阅(@SendToUser注释)

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

  • JavaScript客户端(SockJS)而不是Python客户端连接,或
  • 连接到主题而不是用户队列
我找到了以下资源:

  • SpringBoot2.0.2允许创建一个简单的websocket服务器。本文展示了如何发布到主题(
    @SendTo
    annotation)

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

我发现websocket客户端和websocket都是最新的Python模块,但是这些手册没有解释订阅用户队列

  • Python websocket客户端
  • Python WebSocket
有没有示例说明如何从Python客户端连接到用户队列

示例websocket服务器

弹簧配置:

@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;
    }
}