Подтвердить что ты не робот

Spring 4 websocket без STOMP, socketjs

Я пытаюсь протестировать websocket без использования библиотеки socketjs, а также я не хочу добавлять какое-либо топовое соединение.

Я следую примеру из stackoverflow вопроса: WebSocket с Sockjs и Spring 4, но без Stomp

Итак, без stomp-сервера мне удалось подключиться через библиотеку socketjs с URL-адресом: ws://localhost: 8080/greeting/741/0tb5jpyi/websocket

И теперь я хочу удалить библиотеку socketjs, чтобы разрешить подключение к исходному веб-соединению (могут быть такие устройства, как android, ios и т.д.)

Когда я удаляю параметр:.withSockJS(), я не мог подключиться через websocket.

Я пробовал следующие URL-адреса, но они не работали:

ws://localhost:8080/greeting/394/0d7xi9e1/websocket not worked
ws://localhost:8080/greeting/websocket not worked
ws://localhost:8080/greeting/ not worked 

какой URL-адрес я должен использовать для подключения?

4b9b3361

Ответ 1

Вы должны использовать ws://localhost:8080/greeting:

new WebSocket('ws://localhost:8080/greeting')

Ответ 2

Я использую websockets без STOMP в своем проекте.

Следующая конфигурация работает с spring-boot.

добавить spring зависимость загрузки websocket в pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <version>${spring-boot.version}</version>
</dependency>

Затем добавьте класс (здесь WebSocketServerConfiguration.java), который настраивает ваш websocket:

@Configuration
@EnableWebSocket
public class WebSocketServerConfiguration implements WebSocketConfigurer {

    @Autowired
    protected MyWebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler, "/as");
    }
}

Наконец, вы можете написать свой WebsocketHandler. spring предоставляет вам различные абстрактные классы для WebSocketHandlers (в основном пакете: org.springframework.web.socket.handler). Мой websocket настроен без STOMP, и мой клиент не использует socket.js. Поэтому MyWebSocketHandler расширяет TextWebSocketHandler и переопределяет методы для ошибок, открытия и закрытия соединений и полученных текстов.

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
    ...

    @Override
    public void handleTransportError(WebSocketSession session, Throwable throwable) throws Exception {
        LOG.error("error occured at sender " + session, throwable);
        ...
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        LOG.info(String.format("Session %s closed because of %s", session.getId(), status.getReason()));

        ...
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        LOG.info("Connected ... " + session.getId());

        ...
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage jsonTextMessage) throws Exception {
        LOG.debug("message received: " + jsonTextMessage.getPayload());
        ...
    }
}