2014-09-25 3 views
1

Я пытаюсь использовать 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, этот тестовый файл также не работает.

ответ

0

Оказывается, что это было вызвано «онлайн-щитом» моего вирусщика. Как только я отключил сетевой экран AVG AntiVirus Business Editions, транспорт работает отлично. Похоже, он не любит потоковые данные.

Смежные вопросы