spring-websocket 的 RestTemplateXhrTransport 工作吗?

Posted

技术标签:

【中文标题】spring-websocket 的 RestTemplateXhrTransport 工作吗?【英文标题】:Does spring-websocket's RestTemplateXhrTransport work? 【发布时间】:2014-09-25 14:03:07 【问题描述】:

我正在尝试使用 spring-websocket RestTemplateXhrTransport 进行集成测试,但无法使其正常工作。

服务器是使用 spring-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 一起使用。

我还尝试查看 spring-websockets-portfolio 示例中的 IntegrationPortfolioTests。如果我注释掉 setup-method 中添加 WebSocketTransport 作为主要传输的行并保留使用 RestTemplateXhrTransport 的行,则此测试用例也不起作用。

【问题讨论】:

【参考方案1】:

原来它是由我的病毒扫描程序的“在线防护”引起的。只要我关闭 AVG AntiVirus Business Editions 的在线防护,传输就可以完美运行。看起来它不喜欢流数据。

【讨论】:

以上是关于spring-websocket 的 RestTemplateXhrTransport 工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring-websocket 拒绝基于用户权限的主题订阅

spring-webSocket

对如何使用 Spring-websockets 进行 stomp 调用感到困惑

spring-websocket的搭建

Spring-WebSocket服务器环境搭建

Spring-websocket 配置 websocket发送消息(群发)