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

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


Q1使用nginx代理后不能访问。报错WARNING:tornado.access:400

GET /ws (127.0.0.1) 0.79ms  或者连接失败后会反复发起连接请求。

需要在nginx的location中新增如下配置

# websocket

 proxy_http_version1.1;

 proxy_set_headerUpgrade $http_upgrade;

 proxy_set_headerConnection "upgrade";


Q2 跨域问题(spring websocket)

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

.setAllowedOrigins(“*”)

@Override

public voidregisterWebSocketHandlers(WebSocketHandlerRegistry registry) {

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


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

                      .withSockJS();

}

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

web.xml中添加如下配置

dispatcher

/sockjs/*

websocket配置类中路径中不加sockjs

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

.withSockJS();

前端调用时应加上sockjs

websocket = newSockJS("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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 电影圈内广为流传的那句话:影片质量决定了电影能飞多远,营销则决定了电影能飞多高。作为典型的注意力经济,营销对于电影...
    karroy酱阅读 4,919评论 0 4
  • 快板这么一拍,别的咱不摆,摆一摆咱专题要人才,你来嘛——不来? 简书各大专题中,生长于生活类版块、唯一只围着家庭转...
    斑锦阅读 3,449评论 4 16