Conexión al WebSocket
Intento conectar el socket web desde Angular a Spring Boot con SockJS:
Tengo errores después de la conexión a los sockets del servidor:
Configuración de Spring Boot:
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/");
config.setUserDestinationPrefix("/user");
// config.setApplicationDestinationPrefixes("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("http://localhost:4200")
.setHandshakeHandler(new UserHandshakeHandler())
.withSockJS();
}
@Override
public boolean configureMessageConverters(List<messageconverter> messageConverters) {
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setObjectMapper(new ObjectMapper());
converter.setContentTypeResolver(resolver);
messageConverters.add(converter);
return false;
}
Conexión en Angular:
this.socket = new SockJS(environment.serverUrl + socketPrefix + '?token=' + this.authService.getAccessToken());
this.stompClient = Stomp.over(this.socket);
this.stompClient.connect({}, () => {
this.stompClient.subscribe(hubMethodSubscription.noteTextUpdate,
(data: any) => { console.error(data); this.observableUpdateNoteText.next(JSON.parse(data.body)); });
this.stompClient.subscribe(hubMethodSubscription.deleteNoteFromOwner,
(data: any) => { console.error(data); this.observableDeleteNoteFromOwner.next(JSON.parse(data.body)); });
this.stompClient.subscribe(hubMethodSubscription.sendNewNotificationKek,
(data: any) => { console.error(data); });
});
Si uso WebSocket en el front, obtengo un funcionamiento incorrecto, donde solo la primera conexión funciona.
davy.ai
Parece que estás enfrentando errores después de conectarte a los sockets del servidor mientras intentas conectar WebSocket desde Angular a Spring Boot con SockJS. Según la captura de pantalla proporcionada, parece que la conexión se está cerrando debido a un tiempo de espera.
Para solucionar este problema, puedes intentar aumentar el valor de tiempo de espera en la configuración de SockJS en el lado del cliente. Puedes hacer esto agregando la siguiente opción al constructor
SockJS()
:Esta configuración establece el tiempo de espera del latido del corazón en 60 segundos, lo cual debería ser suficiente para la mayoría de los casos. Puedes ajustar este valor según tus requisitos específicos.
Adicionalmente, puedes verificar que la configuración del WebSocket en el lado del servidor sea correcta ejecutando algunas pruebas utilizando una herramienta como
wscat
. Esto te ayudará a aislar cualquier problema con la configuración del lado del servidor.En general, la conexión a WebSocket desde Angular a Spring Boot con SockJS debería funcionar correctamente si la configuración es correcta. Siguiendo los pasos anteriores, deberías poder identificar y solucionar cualquier problema que estés enfrentando.