资讯专栏INFORMATION COLUMN

在实践中我遇到stompjs, websocket和nginx的问题与总结

Steve_Wang_ / 2727人阅读

摘要:做反向代理是需要注意的问题如果排除所有问题后,那剩下的问题可以考虑出在反向代理上,一下有几点是可以考虑的。

阅读原文:https://wdd.js.org/stomp-over...

1. AWS EC2 不支持WebSocket

直达解决方案 英文版

简单说一下思路:WebSocket底层基于TCP协议的,如果你的服务器基于HTTP协议暴露80端口,那WebSocket肯定无法连接。你只要将HTTP协议修改成TCP协议就可以了。

这个问题也会导致stompjs连不上服务端,报什么版本不兼容的日志

然后是安全组的配置:

同样如果使用了NGINX作为反向代理,那么NGINX也需要做配置的。

// https://gist.githubusercontent.com/unshift/324be6a8dc9e880d4d670de0dc97a8ce/raw/29507ed6b3c9394ecd7842f9d3228827cffd1c58/elasticbeanstalk_websockets

files:
    "/etc/nginx/conf.d/01_websockets.conf" :
        mode: "000644"
        owner: root
        group: root
        content : |
            upstream nodejs {
                server 127.0.0.1:8081;
                keepalive 256;
            }

            server {
                listen 8080;

                location / {
                    proxy_pass  http://nodejs;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_http_version 1.1;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                }
            }

    "/opt/elasticbeanstalk/hooks/appdeploy/enact/41_remove_eb_nginx_confg.sh":
        mode: "000755"
        owner: root
        group: root
        content : |
            mv /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf.old
2. NGINX做反向代理是需要注意的问题

如果排除所有问题后,那剩下的问题可以考虑出在反向代理上,一下有几点是可以考虑的。

HTTP的版本问题: http有三个版本,http 1.0, 1.1, 2.0, 现在主流的浏览器都是使用http 1.1版本,为了保证更好的兼容性,最好转发时不要修改协议的版本号

路径重写的编解码问题: NGINX具有路径重写功能,如果你使用了该功能,就要考虑问题可能出在这里,因为NGINX在路径重写时,需要对路径进行编解码,有可能在解码之后,没有编码就发送给后端的服务器,导致后端服务器无法对URL进行解码。

3. IE8 IE9 有没有简单方便支持WebSocket的方案

目前测试下来,最简单方案是基于flash的。参考:https://github.com/gimite/web...

注意该方案需要在WebSocket服务上的843端口, 提供socket_policy_files, 也可以参考:A PolyFill for WebSockets

网上也有教程是使用socket.io基于ajax长轮训的方案,如果服务端已经确定的情况下,一般是不会轻易改动服务端代码的。而且ajax长轮训也是有延迟,和disconnect时,无法回调的问题。

4. stompjs connected后,没有调用connect_callBack

该问题主要是使用web-socket-js,在ie8,ie9上出现的

该问题还没有分析出原因,但是看了stompjs的源码不是太多,明天用源码调试看看原因。

具体原因已经找到,参考https://github.com/wangduandu...。

5. 参考文献

STOMP Over WebSocket

STOMP Protocol Specification, Version 1.1

Stomp Over Websocket文档,

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39830.html

相关文章

  • websocket+sockjs+stompjs详解及实例

    摘要:面向消息的简单文本协议。为提供了备选方案。但无论哪种场景,对于实际应用来说,这种通信形式层级过低。协议,来为浏览器和间的通信增加适当的消息语义。协议解决了浏览器发起请求以及服务器响应请求的细节,假设协议并不存在,只能使用套接字来编写应用。 最近有项目需求要用到websocket,刚开始以为很简单,但是随着遇到问题,深入了解,才知道websocket并不是想象中的那么简单,这篇文章主要是...

    remcarpediem 评论0 收藏0
  • websocket+sockjs+stompjs详解及实例

    摘要:面向消息的简单文本协议。为提供了备选方案。但无论哪种场景,对于实际应用来说,这种通信形式层级过低。协议,来为浏览器和间的通信增加适当的消息语义。协议解决了浏览器发起请求以及服务器响应请求的细节,假设协议并不存在,只能使用套接字来编写应用。 最近有项目需求要用到websocket,刚开始以为很简单,但是随着遇到问题,深入了解,才知道websocket并不是想象中的那么简单,这篇文章主要是...

    keithyau 评论0 收藏0
  • websocket+sockjs+stompjs详解及实例

    摘要:面向消息的简单文本协议。为提供了备选方案。但无论哪种场景,对于实际应用来说,这种通信形式层级过低。协议,来为浏览器和间的通信增加适当的消息语义。协议解决了浏览器发起请求以及服务器响应请求的细节,假设协议并不存在,只能使用套接字来编写应用。 最近有项目需求要用到websocket,刚开始以为很简单,但是随着遇到问题,深入了解,才知道websocket并不是想象中的那么简单,这篇文章主要是...

    Corwien 评论0 收藏0
  • WebSocket断开原因分析,再也不怕为什么又断开了

    摘要:阅读原文把错误打印出来断开的原因有很多,最好在断开时,将错误打印出来。的字段表示了断开的原因。有三个字段需要注意通过分析这三个字段,一般就可以找到断开原因是错误码,是整数类型是断开原因,是字符串表示是否正常断开,是布尔值。 阅读原文:https://wdd.js.org/websocket-... 1. 把错误打印出来 WebSocket断开的原因有很多,最好在WebSocket断开时...

    ingood 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<