Я написал сервер Blackjack в java, который запускается нормально, но у меня возникли проблемы с написанием отдельного java-клиента для подключения к моему серверу. Я следил за документацией и примерами Spring Websocket, и похоже, что мой клиент подключается без каких-либо ошибок, и я ожидаю, что он ударит по методу afterConnected()
, но он не дойдет до этого. Клиент работает и заканчивается без ошибок. Любая идея, что я делаю неправильно?Не удается подключить клиента к серверу с помощью Spring Websocket
WebSocketConfig.java на стороне сервера:
package com.lactaoen.blackjack.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic", "/queue");
registry.setApplicationDestinationPrefixes("/app");
registry.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/connect").withSockJS();
}
}
Клиент сторона:
package com.lactaoen.blackjack.client;
import org.springframework.messaging.converter.StringMessageConverter;
import org.springframework.messaging.simp.stomp.*;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.messaging.WebSocketStompClient;
import org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport;
import org.springframework.web.socket.sockjs.client.SockJsClient;
import org.springframework.web.socket.sockjs.client.Transport;
import org.springframework.web.socket.sockjs.client.WebSocketTransport;
import java.util.ArrayList;
import java.util.List;
public class BlackjackClient {
public static void main(String[] args) {
List<Transport> transports = new ArrayList<>();
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());
SockJsClient sockJsClient = new SockJsClient(transports);
String stompUrl = "ws://localhost:8080/connect";
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new StringMessageConverter());
stompClient.connect(stompUrl, new BlackjackSessionHandler());
}
private static class BlackjackSessionHandler extends StompSessionHandlerAdapter {
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
// I'd expect it to print this out, but it doesn't get here
System.out.println("Hello, world!");
}
}
}