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

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

Q1使用nginx代理后不能访问。报错WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms  或者连接失败后会反复发起连接请求。
需要在nginx的location中新增如下配置
# websocket
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";

Q2 跨域问题(spring websocket)
  经查阅官方文档springwebsocket 4.1.5版本前默认支持跨域访问,之后的版本默认不支持跨域,需要设置
.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(); 
}

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值