web-dev-qa-db-ja.com

STOMP、sockjsを使用しないSpring 4 WebSocket

Socketjsライブラリを使用せずにwebsocketをテストしようとしていますが、stomp接続を追加したくありません。

私はstackoverflowの質問の例に従っています: SockjsとSpring 4を使用しているがStompを使用していないWebSocket

したがって、ストンプサーバーなしで、次のURLを使用してsocketjsライブラリを介して接続することに成功しました:ws:// localhost:8080/Greeting/741/0tb5jpyi/websocket

そして今、私は生の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を使用する必要がありますか?

12
melihcoskun

ws://localhost:8080/greetingを使用する必要があります:

new WebSocket('ws://localhost:8080/greeting')
5
Sergi Almar

プロジェクトでSTOMPなしのWebSocketを使用しています。

次の構成はspring-bootで機能します。

pom.xmlにSpring BootWebSocketの依存関係を追加します

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

次に、WebSocketを構成するクラス(ここではWebSocketServerConfiguration.Java)を追加します。

@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());
        ...
    }
}
8
duffy356