Wie man einen Spring-Websocket Java Client korrekt implementiert

Ich arbeite an einem Spring WebSocket Stomp-Client für meinen WebSocket-Server und erhalte widersprüchliche Informationen. Ich habe zwei Möglichkeiten gefunden, um es zum Laufen zu bringen, und ohne auf allzu viele Details einzugehen, habe ich mich gefragt, auf welche Weise der Client "korrekt" implementiert werden kann.

Kann mir jemand helfen, zu verstehen, wofür der WebSocketConnectionManager gedacht ist?

Auch noch eine Frage, wie halte ich die Websocket-Verbindung offen und das Programm läuft, um neue Nachrichten anzunehmen, ohne die Zeile System.in.read () schreiben zu müssen.

1'st way: Den SockJsClient direkt benutzen

URI uri = new URI("ws://localhost:8080/stomp");
StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();

List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));

SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());

StompMessageReceiver messageHandler = new StompMessageReceiver();
StompWebSocketHandler websocketHandler = new StompWebSocketHandler(messageHandler, new StringMessageConverter());

try {
    this.webSocketClient.doHandshake(websocketHandler, null, uri).get();
} catch (InterruptedException | ExecutionException e) {
    throw new IllegalStateException(e);
}

System.in.read();

2'nd way: Verwenden des WebSocketConnectionManager

StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));

SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());

StompMessageHandler messageHandler = new StompMessageHandler();
StompWebSocketHandler websocketHandler = new StompWebSocketHandler(messageHandler, new StringMessageConverter());

WebSocketConnectionManager manager = new WebSocketConnectionManager(sockJsClient, websocketHandler, "ws://localhost:8080/stomp");

manager.start();

System.in.read();

Ich weiß, dass ich dies mit den Anmerkungen für @ viel einfacher machen könnt@Configuration und@Bean aber ich versuche eine "rohe" Implementierung zu machen, damit ich verstehen kann, wie alles zusammenarbeitet.

Ein bisschen mehr Informationen:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-client-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-websocket</artifactId>
    <version>8.0.0-RC10</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.0</version>
</dependency>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage