es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo conectarme al websocket usando Postman.

Estoy tratando de crear una aplicación de chat sencilla usando websockets. Seguí este tutorial: https://www.baeldung.com/websockets-spring.

Esta es mi configuración:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

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

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

    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public OutputMessage send(Message message) throws Exception {
        return new OutputMessage(message.getFrom(), message.getText(), Instant.now());
    }
}

@Builder
@Getter
public class Message {
    private final String from;
    private final String text;
}

@Builder
@Getter
public class OutputMessage {
    private final String from;
    private final String text;
    private final Instant date;
}

Al iniciar la aplicación, obtuve:

2021-12-31 14:22:39.442  INFO 1952 --- [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats    : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]

Pensé que tenía todo configurado, así que decidí intentar conectarme usando Postman, pero sin éxito :/ Ejecuté los siguientes endpoints:

ws://localhost/app/chat
ws://localhost:8080/app/chat
ws://localhost/chat
ws://localhost:8080/chat

Ninguno de ellos funciona :/

Estoy usando Postman Websockets beta para realizar las solicitudes.

¿Me faltó algo en la configuración o estoy usando Postman incorrectamente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Java, Spring-boot, y Spring-websocket, permíteme revisar tu implementación y abordar tus preocupaciones.

    A partir de la configuración y el código proporcionados, puedo ver que has creado una aplicación de chat simple utilizando websockets y has seguido el tutorial proporcionado por Baeldung. También he notado que has implementado correctamente la clase WebSocketConfig donde has habilitado el broker de mensajes de WebSocket y has establecido los prefijos de destino para la aplicación. Además, también has registrado endpoints Stomp en el método registerStompEndpoints.

    En cuanto a la clase WebSocketController, puedo ver que has etiquetado correctamente el método send con las anotaciones @MessageMapping y @SendTo. Estas anotaciones aseguran que los mensajes entrantes se dirijan primero al destino /chat y luego se reenvíen al destino /topic/messages para su difusión a todos los clientes suscritos.

    Además, las clases Message y OutputMessage que has utilizado como cargas de mensaje también están correctamente etiquetadas con @Builder y @Getter.

    Según la salida del registro que has proporcionado, parece que la conexión WebSocket se está estableciendo correctamente. Sin embargo, estás teniendo problemas al intentar conectarte a los endpoints de WebSocket utilizando Postman.

    Para conectarte a los endpoints de WebSocket utilizando Postman Websockets beta, debes seguir los siguientes pasos:
    1. Abrir Postman y crear una nueva solicitud.
    2. Cambiar el método de solicitud a GET e introducir la URL de WebSocket. En este caso, debería ser ws://localhost:8080/chat.
    3. Hacer clic en el botón Enviar para conectarse al endpoint de WebSocket.

    Si la conexión WebSocket es exitosa, deberías comenzar a recibir mensajes en el cuerpo de la respuesta.

    En tu caso, has intentado múltiples URL de WebSocket, pero ninguna de ellas ha funcionado. Te recomendaría que verifiques si tu aplicación se está ejecutando correctamente y está escuchando conexiones WebSocket en el puerto 8080. También puedes intentar conectarte al endpoint de WebSocket utilizando un navegador web, por ejemplo, utilizando la API JavaScript de WebSocket.

    Además, también puedes intentar habilitar los registros de depuración para Spring Boot WebSocket para obtener más información sobre las conexiones WebSocket. Puedes agregar la siguiente configuración en tu archivo application.properties:

    logging.level.root=DEBUG
    logging.level.org.springframework.web.socket.config.annotation=DEBUG
    

    Esto te proporcionará registros detallados sobre el handshake WebSocket y los mensajes intercambiados entre el cliente y el servidor.

    Espero que esto te ayude a resolver tu problema. Avísame si tienes alguna pregunta adicional.

Comments are closed.