Не работает WebSocket

140
18 января 2020, 23:20

Пытаюсь сделать минимальный рабочий пример с веб-сокетами. На стороне сервера использую Spring Framework, клиент - JavaScript.

  • Сервер

К простому Spring Boot проекту добавил класс с конфигурацией:

@Configuration
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(notificationWebSocketHandler(), "/notification").setAllowedOrigins("*").withSockJS();
    }
    @Bean
    public NotificationWebSocketHandler notificationWebSocketHandler() {
        return new NotificationWebSocketHandler();
    }
}
public class NotificationWebSocketHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Connection established");
        for (int i = 0 ; i < 5; i++) {
            TextMessage message = new TextMessage("Notification " + i);
            session.sendMessage(message);
            try {
                Thread.sleep(3000);
            }
            catch (Exception ex) {
                System.out.println("An error occurred");
                session.close(CloseStatus.SERVER_ERROR);
            }
        }
        session.close(CloseStatus.NORMAL);
    }
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("Connection closed with the status: " + status);
    }
}
  • Клиент index.html

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
        <!-- <script src="stomp.min.js"></script> -->
        <script>
            var url = 'http://localhost:8080/notification';
            var socket = new SockJS(url);
            socket.onopen = function() {
                console.log('Opening...');
            };
            socket.onclose = function() {
                console.log('Closing...');
            };
            socket.onmessage = function (event) {
                console.log('Received notification: ', event.data);
            }
        </script>
    </head>
    <body></body>
    

При открытии файла index.html в консоли браузера выходят ошибки:

GET http://localhost:8080/notification/info?t=1554898230939 404

Access to XMLHttpRequest at 'http://localhost:8080/notification/info?t=1554898230939' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

READ ALSO
Настройка даты и времени в input

Настройка даты и времени в input

Как сделать, чтобы <input type="datetime-local" > имел максимальное значение даты и времени, сегодняЧерез JS

160
Классы JS (В частности ES5)

Классы JS (В частности ES5)

Допустим такой код:

169
Как задать параметры дебаггеру в visual studio code?

Как задать параметры дебаггеру в visual studio code?

Не могу разобраться как настроить debugger в vs code, а именно, куда передавать эти глобальные переменные, вот пример того как они выглядят в вебшторме

122
Отрисовка стрелки спидометра в canvas

Отрисовка стрелки спидометра в canvas

Хочу сделать анимацию спидометра с помощью canvasНо мне необходимо, чтобы стрелка спидометра была треугольной формы и при изменении значения,...

134