基于Java的websocket客户端,用于基于Spring的websocket服务器

基于Java的websocket客户端,用于基于Spring的websocket服务器,java,spring-boot,websocket,spring-websocket,java-websocket,Java,Spring Boot,Websocket,Spring Websocket,Java Websocket,我使用Spring Boot开发了这个websocket服务器。服务器与基于js的客户端配合良好 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(final MessageBrokerReg

我使用Spring Boot开发了这个websocket服务器。服务器与基于js的客户端配合良好

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(final MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(final StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();
        registry.addEndpoint("/chat");
    }

}
控制员:

@Controller
public class ChatController {

    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public OutputMessage send(final Message message) throws Exception {

        final String time = new SimpleDateFormat("HH:mm").format(new Date());
        return new OutputMessage(message.getFrom(), message.getText(), time);
    }

}
这是服务器端。现在,对于客户端,我已经创建了一个@ClientEndpoint,当我连接到URI“ws://localhost:8080/spring mvc java/chat”时,我能够建立一个连接,我可以看到@ClientEndpoint的@OnOpen回调被触发

但是,userSession.getAsyncRemote().sendText(消息)似乎没有任何效果。我看不到服务器的响应

我可以看到js客户端是:

  • 连接到服务器var socket=new SockJS(“/spring mvc java/chat”)
  • 订阅stompClient.subscribe('/topic/messages'
  • 发送消息stompClient.Send(“/app/chat”
  • 我能够实现第一步。如何在基于Java的客户端中实现第二步和第三步


    谢谢

    首先,您需要一个websocketclient和WebSocketStomClient

    WebSocketClient client = new StandardWebSocketClient();
    WebSocketStompClient stompClient = new WebSocketStompClient(client);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());
    
    您必须从
    StompSessionHandler

    getPayloadType
    handleFrame
    afterConnected
    handleException
    handleTransportError
    
    方法

    StompSessionHandler sessionHandler = new CustomStompSessionHandler();
    
    您可以这样连接套接字。您可以完成发送和接收消息

    StompSession stompSession=stompClient.connect("ws://localhost:8080/chat",sessionHandler).get();
    
    这两个按钮触发websocket
    主题/消息
    通过套接字向您发送消息

    /app/chat
    向套接字发送
    消息

    stompSession.subscribe("/topic/messages", sessionHandler);
    stompSession.send("/app/chat", new Message("Hi", "user"));
    

    您想要这样吗?

    首先,您需要一个websocketclient和WebSocketStomClient

    WebSocketClient client = new StandardWebSocketClient();
    WebSocketStompClient stompClient = new WebSocketStompClient(client);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());
    
    您必须从
    StompSessionHandler

    getPayloadType
    handleFrame
    afterConnected
    handleException
    handleTransportError
    
    方法

    StompSessionHandler sessionHandler = new CustomStompSessionHandler();
    
    您可以这样连接套接字。您可以完成发送和接收消息

    StompSession stompSession=stompClient.connect("ws://localhost:8080/chat",sessionHandler).get();
    
    这两个按钮触发websocket
    主题/消息
    通过套接字向您发送消息

    /app/chat
    向套接字发送
    消息

    stompSession.subscribe("/topic/messages", sessionHandler);
    stompSession.send("/app/chat", new Message("Hi", "user"));
    

    你想这样吗?

    当你说基于java的客户端时,你使用的是web套接字库和stomp库吗?不,没有stomp,没有sockjs。当你说基于java的客户端时,我实际上是在遵循这个东西,你使用的是web套接字库和stomp库吗?不,没有stomp,没有sockjs。我实际上是在遵循这个东西,而这个code可能会解决这个问题,即如何以及为什么解决这个问题会真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您是在将来为读者回答这个问题,而不仅仅是现在提问的人。请您的回答添加解释,并指出问题的局限性nd假设适用。虽然此代码可能会解决问题,但如何以及为什么解决此问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您是在将来为读者回答问题,而不仅仅是现在问问题的人。请您的答案添加解释并给出答案说明适用的限制和假设。