Я пытаюсь подключить приложение Angular к серверу Spring Boot WebSocket, но обнаруживаю ошибку со следующим сообщением:
Код: Выделить всё
A WebSocket frame was sent with an unrecognised opCode of [7]
Код: Выделить всё
@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("/chess-websocket").setAllowedOrigins("http://localhost:4200").withSockJS();
}
}
Код: Выделить всё
import { Component, OnInit } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { Client } from '@stomp/stompjs';
import SockJS from 'sockjs-client';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet],
templateUrl: './app.component.html',
styleUrl: './app.component.css',
})
export class AppComponent implements OnInit {
title = 'client';
ngOnInit(): void {
const socket = new SockJS('http://localhost:8080/chess-websocket');
const stompClient = new Client({
webSocketFactory: () => socket,
debug: (msg) => console.log(msg),
onConnect: () => console.log('Connected'),
onStompError: (frame) => console.error('STOMP Error:', frame),
});
stompClient.activate();
}
}
Код: Выделить всё
"dependencies": {
"@angular/animations": "^18.2.0",
"@angular/common": "^18.2.0",
"@angular/compiler": "^18.2.0",
"@angular/core": "^18.2.0",
"@angular/forms": "^18.2.0",
"@angular/platform-browser": "^18.2.0",
"@angular/platform-browser-dynamic": "^18.2.0",
"@angular/router": "^18.2.0",
"@stomp/stompjs": "^7.0.0",
"rxjs": "~7.8.0",
"sockjs-client": "^1.6.1",
"tslib": "^2.3.0",
"zone.js": "~0.14.10"
}
Код: Выделить всё
org.springframework.boot
spring-boot-starter-websocket
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
Кто-нибудь сталкивался с этой проблемой или знает, как исправить эту ошибку? Буду очень признателен за любую помощь!
Шаги, которые я пробовал на данный момент:
- Проверил, что конечная точка сервера WebSocket /chess-websocket правильно настроена и доступна на http://localhost:8080, Postman может подключиться.
- Проверил настройки CORS.
- Обновил все необходимое зависимости, включая @stomp/stompjs и sockjs-client.
Подробнее здесь: https://stackoverflow.com/questions/792 ... lar-spring
Мобильная версия