Websocket Server / Клиент, использующий Spring - PullRequest
0 голосов
/ 07 марта 2019

Я новичок в WebSockets и пытаюсь создать сервер Websocket на основе Spring, а также клиент Java для общения с ним. Я сталкиваюсь с проблемами с фактическим соединением, как бы то ни было. Я предполагаю, что это как-то связано с моим WebSocketConfig.java, хотя я не знаю достаточно о том, как работает Websockets, чтобы правильно его подключить ... Есть много руководств в Интернете, которые показывают пример кода, но не много объяснений о том, что на самом деле происходит, и как все на самом деле работает.

Меня также смущают многие способы, которыми веб-сокеты могут казаться реализованными ... В конце концов, я хочу настроить это так, чтобы сервер мог общаться с отдельными клиентами. Я на правильном пути?

Ошибка при подключении:

Caused by: org.glassfish.tyrus.core.HandshakeException: Response code was not 101: 404.

Код клиента:

public static void main(String[] args) throws InterruptedException {
    LOGGER.info("Running Main.");

    WebSocketClient client = new StandardWebSocketClient(); //provided by Tyrus

    WebSocketStompClient stompClient = new WebSocketStompClient(client);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());

    StompSessionHandler sessionHandler = new MyStompSessionHandler();
    stompClient.connect("ws://localhost:8080/websocket-api/chat/foo", sessionHandler);

    Thread.sleep(10_000);
}

Код сервера: (в основном на примере учебного пособия по WebSocket от Spring)

ChatController.java

@Controller
public class ChatController {

    @MessageMapping("/websocket-api/chat/{topic}")
    @SendTo("/websocket-api/topic/messages")
    public OutputMessage send(
            @DestinationVariable("topic") String topic,
            Message message
    ) throws Exception {
        return new OutputMessage(message.getFrom(), message.getText(), topic);
    }
}

WebSocketConfig.java

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Value("/websocket-api") //to be put into configuration eventually
    private String baseWebsocketApi;

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker(baseWebsocketApi + "/topic");
        config.setApplicationDestinationPrefixes(baseWebsocketApi + "/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint(baseWebsocketApi + "/chat").setAllowedOrigins("*").withSockJS();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...