websocket 踩坑

本贴最后更新于 1825 天前,其中的信息可能已经物是人非

使用技术

  • nginx
  • spring stomp websocket

遇到的问题

round 1

最开始连接死活建立不上,然后发现是使用了 nginx 的原因,需要配置一下,转发请求头

       location /brms-scheduler {
            proxy_pass  http://localhost:6061;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $Host;
       }

round 2

但是又遇到了新的问题,老是提醒 http session 拿不到

因为我需要做到对指定用户进行推送消息,所以在 websocket 握手阶段需要把 http session 拿到,然后根据 session 中的 user 生成 Principal。

我最开始猜测是因为 nginx 使用了负载均衡,导致 http session 在 A 服务器上,但是建立 websocket 是在 B 服务器上,然而并没有

round 3

最后找了半天还是 Stack Overflow 的老哥厉害,下面这段话给了我启发

image.png

于是我猜测是因为 nginx 转发太慢了导致 http session 还没创建完成,就开始进行 websocket 建立

其实开始的时候我也有过这个怀疑,但是我在本地执行就不会报错,现在回想起来是因为我本地运行速度太快了。。。。

抱着试一试的心态,我将建立 websocket 的函数延迟了 4 秒钟执行,结果就 OK 了!!!妈个鸡

  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 317 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
1 操作
614756773 在 2019-12-24 14:49:06 更新了该帖

相关帖子

3 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • hjljy 1 评论

    成都老铁 666

    老哥也成都的哦
    614756773
  • 其他回帖
  • 614756773

    如果有老哥遇到了 websocket 的问题,感觉我能试着帮忙解决了trollface

    1 回复
  • view666

    厉害厉害,websocket 一霸。