Не удается подключиться к серверу java websocket - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать простой веб-сокет java чат. Но я испытываю невероятную борьбу, пытаясь выяснить, в чем здесь проблема и почему я получаю "Firefox не может установить sh соединение с сервером по адресу ws: // localhost: 8080 / ivan- Stanev-клиент / чат / а ». У меня есть простой веб-сокет java сервер:

@ServerEndpoint(value = "/chat/{username}", decoders = MessageDecoder.class, encoders = MessageEncoder.class)
public class ChatEndpoint {
    private Session session;
    private static final Set<ChatEndpoint> chatEndpoints = new CopyOnWriteArraySet<>();
    private static HashMap<String, String> users = new HashMap<>();

    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) throws IOException, EncodeException {

        this.session = session;
        chatEndpoints.add(this);
        users.put(session.getId(), username);

        Message message = new Message();
        message.setFrom(username);
        message.setContent("Connected!");
        broadcast(message);
    }
...

И эта часть создает ошибку в javascript (не знаю, почему я не могу установить sh соединение, я искал везде ):

    ws = new WebSocket("ws://" + document.location.host + "/ivan-stanev-client/chat/" + username);

PS Я изучаю этот урок: https://github.com/eugenp/tutorials/tree/c83c449fa5a7ac2462fabf0ed26969f1b037aa12/java-websocket

1 Ответ

0 голосов
/ 24 марта 2020

В чем была проблема? Tomcat использует ServletContainerInitializer для поиска любых классов, помеченных с помощью ServerEndpoint в приложении. Spring Boot, с другой стороны, не поддерживает ServletContainerInitializer, когда вы используете какой-либо встроенный веб-контейнер.

Поэтому нам необходимо экспортировать наш ServerEndpoint, создав компонент ServerEndpointExporter. Класс WebSocketConfig должен был быть создан в приложении.

@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

Также мне не хватало аннотации @Component на сервере WebSocket.

- Кредиты http://thegeekyasian.com/websocket-in-spring-boot/

...