Я пытаюсь использовать Spring-websocket RestTemplateXhrTransport для теста интеграции, но я не могу заставить его работать.Работает ли Spring-websocket RestTemplateXhrTransport?
Сервер настроен с пружинным WebSocket (4,1-RELEASE) с бай-книжной конфигурацией:
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/socket").withSockJS().setClientLibraryUrl("../common/lib/sockjs.js");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/", "/user/");
registry.setApplicationDestinationPrefixes("/app", "/topic");
}
}
я ожидал бы следующий код для работы, но это как раз времени ожидания в ожидании для преамбулы. Если я смотрю на сетевой трафик, я могу видеть, что преамбула посылается сервером, но клиент просто повиснет в ожидании данных, прочитав заголовки:
List<Transport> transports = new ArrayList<>();
RestTemplate restTemplate = new RestTemplate();
RestTemplateXhrTransport xhrTransport = new RestTemplateXhrTransport(restTemplate);
// This makes it work, but that is xhr-polling, and I want xhr-streaming.
//xhrTransport.setXhrStreamingDisabled(true);
transports.add(xhrTransport);
SockJsClient sockJsClient = new SockJsClient(transports);
AbstractWebSocketHandler webSocketHandler = new AbstractWebSocketHandler() {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("connected");
}
};
sockJsClient.doHandshake(webSocketHandler, new WebSocketHttpHeaders(), new URI("http://localhost:8080/socket"))
.get(3000, TimeUnit.SECONDS);
Я использую сервер приложений Tomcat. Он не работает как с 7.0.55, так и с 8.0.12.
Я также попытался взглянуть на IntegrationPortfolioTests из образца spring-websockets-portfolio. Если я прокомментирую строку в методе настройки, который добавляет WebSocketTransport в качестве основного транспорта и оставьте строку, в которой используется RestTemplateXhrTransport, этот тестовый файл также не работает.