запускать конечную точку javax.websocket весной? - PullRequest
2 голосов
/ 05 мая 2020

Я реализовал сервер websocket, следуя этому руководству: https://www.baeldung.com/java-websockets

Как мне запустить это приложение? Я использую Spring, и моя основная функция выглядит так:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

, а моя конечная точка websocket выглядит так:

import java.io.IOException;

import javax.websocket.*;
import javax.websocket.server.*;

@ServerEndpoint(
        value = "/chat/{username}",
        decoders=MessageDecoder.class,
        encoders = MessageEncoder.class
)
public class Controller {
    // ...
}

сейчас, когда я запускаю это, и пытаюсь подключиться к конечная точка websocket, например: wsta ws://localhost:8080/chat/aa -I Я получаю следующую ошибку:

запрос обновления WebSocket

---

Хост: localhost: 8080

Подключение: Обновление

Обновление: websocket

Se c -WebSocket-Version: 13

Se c -WebSocket-Key: ...

Источник: http://localhost

Ответ на обновление WebSocket

---

404 Не найдено

Различные: OriginAccess-Control-Request-MethodAccess-Control-Request-Headers

Content-Type: application / json

Transfer-Encoding: chunked

Дата: Вт, 05 Май 2020 12:12:52 GMT

WebSocketError: Ошибка ответа WebSocket

Ответ здесь ({ ссылка }) говорит, что вы получаете доступ к конечной точке webscoket через ws://localhost:8080/context/chat/aa. Что такое контекст и как заставить мой сервер работать и принимать входящие соединения?

1 Ответ

1 голос
/ 05 мая 2020

Чтобы получить учебник по Baeldung, упомянутый в OP, работающий

  1. , мне пришлось добавить зависимость maven для spring-boot-starter-websocket в pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
  2. Добавьте пружину @Configuration, в которую добавляется @EnableWebSocket и создается экземпляр объекта ServerEndpointExporter:

    @Configuration
    @EnableWebSocket
    public class WsConfig {
    
        @Bean
        public ServerEndpointExporter serverEndpoint() {
            return new ServerEndpointExporter();
        }
    }
    
  3. Дополнительно должен быть пружина @Component:

    @ServerEndpoint(
            value = "/chat/{username}",
            decoders=MessageDecoder.class,
            encoders = MessageEncoder.class
    )
    @Component
    public class Controller {
     ...
    


В конце концов конечная точка веб-сокета была доступна под ws://localhost:8080/chat/torvalds
...