当前位置: 首页 > 知识库问答 >
问题:

Spring在SockJS上跺脚,Tomcat不升级到WebSocket

厉坚
2023-03-14

我正在构建一个无状态Spring(4.2.4.RELEASE)解决方案,使用STOMP over Websockets和SockJS,以及使用JWT连接移动设备和全双工通信的Restendpoint。我使用Tomcat 8.0.33作为Web服务器,并使用html和sockjs javascript客户端进行测试。stomp协议使用http回退可以很好地工作,但我不能仅使用websocket协议。我在很多方面尝试了CORS,但我不确定这是Tomcat的问题还是spring配置不好。我甚至在同一个域和端口中测试了我的html,SockJS仍在退回到xhr或iFrame中。

WebScoketConfig。JAVA

@EnableWebSocketMessageBroker
 public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer
{

@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
{
    RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
    registry.addEndpoint("/ws").setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
    .setAllowedOrigins("*").withSockJS().setSessionCookieNeeded(false)
    .setStreamBytesLimit(512 * 1024)
    .setHttpMessageCacheSize(1000)
    .setDisconnectDelay(30 * 1000);
}

@Override
public void configureClientOutboundChannel(ChannelRegistration registration) {
    registration.taskExecutor().corePoolSize(50);
}


@Override
public void configureMessageBroker(MessageBrokerRegistry registry)
{
    registry.enableSimpleBroker("/queue/", "/topic/");
    // registry.enableStompBrokerRelay("/queue/", "/topic/");
    registry.setApplicationDestinationPrefixes("/myapp");
}

 public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
    registration.setMessageSizeLimit(500 * 1024);
    registration.setSendBufferSizeLimit(1024 * 1024);
    registration.setSendTimeLimit(20000);
 }
}

WebSecurityConfig.java

    public class WebSecurityConfig extends WebSecurityConfigurerAdapter
    {

        @Override
        protected void configure(HttpSecurity http) throws Exception
        {
            http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/**").permitAll();                
        }

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception
        {

        }
    }

共有2个答案

董良策
2023-03-14

从版本8开始,Tomcat支持Websocket。检查您的Tomcat版本并升级。

此外,请检查浏览器是否支持Websocket。

谢同化
2023-03-14

我解决了我的问题,实际上代码是好的,但是防病毒软件(卡巴斯基)在我的客户端浏览器打开后关闭了连接。它迫使SockJ退回到不同的策略中。我在关闭了杀毒软件的情况下测试了客户端,Websocket传输运行得很好。在mac上测试

 类似资料:
  • 在客户端javascript上,我有 在服务器端 从这个设置中,我偶尔(大约每30次页面刷新一次)会遇到消息丢失,这意味着我既看不到客户端的“message received”消息,也看不到Chrome调试工具的websocket流量。 “发送前”始终记录在服务器端。 这看起来像是当我在订阅()方法中调用MessageSending操作时,它还没有准备好。(如果我把Thread.sleep(50)

  • 我使用的是Spring版本4.3.6。在服务器端和bowers客户端上发布"Stamp-webSocket":"2.0"和"Sockjs-Client":"1.1.4" 以下是服务器端的所有相关代码- 在客户机上,这是代码- Websocket connect建立后,我收到心跳消息,但没有收到我正在发送的通知。我甚至尝试过使用@SendTo注释,但它不起作用。 当我使用webjarstomp和so

  • 我用的是Spring靴。我在控制器中调用的方法如下所示: 升级到Tomcat8后,调用此方法时会出现以下错误。我在第一行上设置了一个断点,这个断点从未到达。: 有人遇到过这个问题吗?

  • 尝试使用Spring 4 WebSocket与STOMP通过使用Sockjs套接字。我面临一个问题。 我的配置: websocket.xml-Spring上下文的一部分 控制器代码: 客户端: 输出: 我做错了什么? 我在谷歌(TickerStocks或类似的东西,问候应用程序(Spring的例子))中找到了一些例子,所有这些都给了我同样的错误。我尝试使用WebSocket进行握手(不使用sock

  • 我尝试将Java EE应用程序从Tomcat6升级到Tomcat7。在我的PC上一切都运行良好(Windows XP 32位,带32位JVM,JDK 1.6)。 在java.library.path:c:\program files\java\jdk1.6.0_21\bin上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中实现最佳性能; 我还得到了以下几点: 信息:服务器在

  • 我面临一个问题,我无法将一些json转换为java对象。这个问题在这里:Spring Jackson反序列化通用对象列表。现在,我能够通过从Spring 3.0.3升级到Spring 3.2来解决这个问题。 我现在面临的问题如下。我的序列化/反序列化在我的webapp上工作得很好,但在我的单元测试上却不行。当我运行/调试它们时,我发现我遇到了与之前相同的问题(另一个stackoverflow帖子上