V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jonychen1
V2EX  ›  2018

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

  •  
  •   jonychen1 · 2018-07-19 09:42:15 +08:00 · 1320 次点击
    这是一个创建于 2353 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4433 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:03 · PVG 18:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.