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

news/2024/7/1 2:59:25

阅读原文: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_websocketsfiles:"/etc/nginx/conf.d/01_websockets.conf" :mode: "000644"owner: rootgroup: rootcontent : |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: rootgroup: rootcontent : |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文档,

http://lihuaxi.xjx100.cn/news/247667.html

相关文章

汽车中的ECU, VCU, MCU, HCU

1. ECU Electronic Control Unit,即电子控制单元,也可以叫 “行车电脑”。决定整车性能的最重要的部分就是它的ECU。 作为现代汽车电子的核心元件之一 ,ECU电子控制单元在汽车中也许有好几个,每个管理不同的功能;而每…

较新颖的智能优化算法

较新颖的智能优化算法 序号方法参考文献年份1人群搜索算法Dai, C., Y. Zhu, and W. Chen. Seeker optimization algorithm. in International Conference on Computational and Information Science. 2006. Springer.20062人工蜂群算法Karaboga, D. and B.J.J.o.g.o. Basturk,…

mvc存储Cookie和读取Cookie方法

mvc存储Cookie和读取Cookie方法://存储HttpCookie cookie new HttpCookie("User");System.Text.Encoding enc System.Text.Encoding.GetEncoding("gb2312");cookie["id"] HttpUtility.UrlEncode(logid.ToString(), enc);cookie[&q…

android App流量统计

2019独角兽企业重金招聘Python工程师标准>>> 原文地址:http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html ###android流量简介 流量统计文件:路径/proc/net/dev打开文件,其中 lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量…

显著性检验

显著性检验显著性检验是“统计假设检验”的一种。用来检测科学实验中实验组与对照组之间是否有差异以及差异是否显著的方法。统计假设实验:事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设…

[洛谷P1317]低洼地

题目大意:一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的…

PHP函数学习nl2br(),strlen(),mb_strlen()

2019独角兽企业重金招聘Python工程师标准>>> 1 nl2br($str): 注意&#xff1a;n之后的是字母L的小写&#xff0c;不要当做数字1. 函数作用&#xff1a;在$str中的每个新行(\n)之前插入HTML换行符( <br/> ) 示例&#xff1a; echo nl2br("One line.\nAnot…

nginx图片过滤处理模块http_image_filter_module安装配置笔记

http_image_filter_module是nginx提供的集成图片处理模块&#xff0c;支持nginx-0.7.54以后的版本&#xff0c;在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可&#xff0c;就可以用它实时缩放图片&#xff0c;旋转图片&#xff0c;验证图片有效性以及获取图片宽…