Я разрабатываю веб-приложение, используя пружинную загрузку, angular cli и sockjs.
Реализация WebSocket:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/info", "/user", "/notif");
registry.setApplicationDestinationPrefixes("/app");
}
}
Реализация утилиты angular websocket:
Примечание. Этот класс используется для подключения веб-сокета и подписки.
@Injectable()
export class WebSocketUtil {
stompClient = null;
constructor() {
}
connect(subscribers: Subscriber[] = null) {
let _this = this;
let socket = new SockJS("https://localhost/ws");
if (socket != null) {
this.stompClient = Stomp.over(socket);
if (this.stompClient != null) {
console.log("Stomp client is connected!");
let headers = {};
headers["X-CSRF-TOKEN"] = ...;// csrf code
this.stompClient.connect(headers, (frame) => {
subscribers.forEach((subscriber) => {
_this.stompClient.subscribe(subscriber.URL, subscriber.CALLBACK);
});
}, () => {
console.log(_this.stompClient);
});
} else {
throw {
name: "StompClientNotRegistered",
message: "Stomp client is not registered!"
};
}
} else {
throw {
name: "SocketEstablishFailed",
message: "Socket cannot be established!"
};
}
}
send(message) {
this.stompClient.send(message.url, JSON.stringify(message.params));
}
}
Реализация углового класса подписчика:
Примечание. Этот класс используется для привязки подписки.Подпрограммы для перенаправления клиента!
export class Subscriber {
constructor(private url: string = "", private callback: any) {
}
get URL() {
return this.url;
}
get CALLBACK() {
return this.callback;
}
}
Использование WebsocketUtil:
Примечание. Этот фрагмент кода вызывается после этапа инициализации просмотра.
this.webSocketUtil.connect([
new Subscriber("/notif", function (data) {
console.log(data);
}),
new Subscriber("/user", function (data) {
console.log(data);
})
]);
Приведенный выше код вызывает следующую ошибку в консоли веб-браузера (FF и Chrome):
Примечание: https://localhost/ws доступен и возвращает "Добро пожаловать в SockJS!"сообщение.