今天来整理一些我在工作中配置上遇到的一些问题。
Q1使用nginx代理后不能访问。报错WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms 或者连接失败后会反复发起连接请求。
需要在nginx的location中新增如下配置[code]# websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";[/code]
Q2 跨域问题(spring websocket)
经查阅官方文档springwebsocket 4.1.5版本前默认支持跨域访问,之后的版本默认不支持跨域,需要设置[code].setAllowedOrigins(“”)
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler(), "/echo.do").setAllowedOrigins("").addInterceptors(new HandshakeInterceptor());
registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("").addInterceptors(new HandshakeInterceptor())
.withSockJS();
}[/code]
Q3 .do配置导致sockjs失效问题(spring websocket)
web.xml中添加如下配置[code]<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/sockjs/</url-pattern>
</servlet-mapping>[/code]websocket配置类中路径中不加sockjs[code]registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("").addInterceptors(new HandshakeInterceptor())
.withSockJS();[/code]前端调用时应加上sockjs[code]websocket = new SockJS("http://127.0.0.1:8080/WebSocketTest001/sockjs/echo");[/code]
Q4 一个websocketsession对应多个session的情况
这是由于尽管每次都能保证有一个websocketsession存在,但客户端没连接一次tomcat都建立一个链接,除非你在请求头里添加cookie:JSESSIONID=xxxxxx
Q5 能收到客户端消息,后台也显示发送,但是客户端收不到
这个问题经我个人观察和猜测,应该是websocketsession没有成功关闭或者成功关闭但是和一个websocketsession对应多个session有关,因为我把上面的问题解决了之后,这个问题也没出现过了。