WebSocket配置中会遇到的一些问题

今天来整理一些我在工做中配置上遇到的一些问题。前端

 

Q1使用nginx代理后不能访问。报错WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms  nginx

须要在nginx的location中新增以下配置web

# websocketspring

 proxy_http_version 1.1;跨域

 proxy_set_header Upgrade $http_upgrade;tomcat

 proxy_set_header Connection "upgrade";websocket

 

Q2 跨域问题(spring websocket)cookie

经查阅官方文档springwebsocket 4.1.5版本前默认支持跨域访问以后的版本默认不支持跨域须要设置session

.setAllowedOrigins(“*”)app

@Override

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

registry.addHandler(myWebSocketHandler(), "/echo.do").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor());

                                                                                           

registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor())

                      .withSockJS();

}

Q3 *.do配置致使sockjs失效问题(spring websocket)

web.xml中添加以下配置

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>/sockjs/*</url-pattern>

</servlet-mapping>

websocket配置类中路径中不加sockjs

registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor())
.withSockJS(); 

前端调用时应加上sockjs

websocket = new SockJS("http://127.0.0.1:8080/WebSocketTest001/sockjs/echo");

 

Q4 一个websocketsession对应多个session的状况 
这是因为尽管每次都能保证有一个websocketsession存在但客户端没链接一次tomcat都创建一个连接除非你在请求头里添加cookie:JSESSIONID=xxxxxx

 

Q5 能收到客户端消息后台也显示发送可是客户端收不到 
这个问题经我我的观察和猜想应该是websocketsession没有成功关闭或者成功关闭可是和一个websocketsession对应多个session有关由于我把上面的问题解决了以后这个问题也没出现过了

 

若是大家以为本身或者团队弄WebSocket这块比较麻烦,或者开发成本高,周期长的话,能够考虑用三方的。

我这里只推荐个免费的 GoEasy 大家本身能够去看看。

网址:www.goeasy.io

相关文章
相关标签/搜索