websocket 踩坑

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

使用技术

遇到的问题

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)。

    41 引用 • 156 回帖 • 630 关注
  • 一些有用的避坑指南。

    54 引用 • 82 回帖
1 操作
614756773 在 2019-12-24 14:49:06 更新了该帖

赞助商 我要投放

2 回帖
请输入回帖内容 ...
  • 614756773

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

  • hjljy 1 评论

    成都老铁 666

    老哥也成都的哦
    614756773