我正在构建一个无状态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
{
}
}
从版本8开始,Tomcat支持Websocket。检查您的Tomcat版本并升级。
此外,请检查浏览器是否支持Websocket。
我解决了我的问题,实际上代码是好的,但是防病毒软件(卡巴斯基)在我的客户端浏览器打开后关闭了连接。它迫使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帖子上