在vue中如何使用WebSocket 以及nginx代理如何配置WebSocket
WebSocket
WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信。浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
浏览器支持情况

现代浏览器基本都支持WebSocket
在vue中的使用
data(){
return {
socket:null
}
},
mounted () {
window.onbeforeunload = function () {
this.close()
}
this.initSocket()
},
destroyed () {
// 销毁组件时关闭socket
this.close()
},
methods: {
initSocket: function () {
if(typeof(WebSocket) === "undefined"){
alert("您的浏览器不支持socket")
}else{
// 实例化socket
let path = `ws://10.0.2.15:8800/ws/${id}`;
this.socket = new WebSocket(path)
this.socket.onopen = this.open
this.socket.onerror = this.error
this.socket.onmessage = this.getMessage
this.socket.onclose = this.close
}
},
open () { //连接成功调用send发送数据
console.log("socket连接成功");
let msg = {"test":"hellow"};
this.send(JSON.stringify(msg));
},
error () { //连接失败重连
console.log("socket连接错误")
this.initSocket()
},
getMessage (msg) { // 接收数据
const redata = JSON.parse(msg.data);
console.log("socket接收数据",redata);
},
send (Data) {
this.socket.send(Data)
},
close () {
console.log("socket关闭")
},
详情请查看这里
nginx配置websocket
平时很多项目都是使用nginx部署上线的,那么如果项目里使用了websocket,相对应的也需要去配置nginx。
server {
listen 8099; #端口号
server_name http:10.0.1.55; #服务器地址或绑定域名
#charset koi8-r;
#access_log logs/host.access.log main;
location /{
root E:/www/; #项目文件夹
index index.html index.htm;
}
location /api/ {
proxy_pass http://10.0.2.15:8800/;#应用服务器HTTP地址
}
#websocket代理配置如下
location /ws/ {
proxy_pass http://10.0.2.15:8800;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 36000s; #10小时未传输数据则关闭连接
}
}
默认情况下,如果代理服务器在60秒内未传输任何数据,则连接将关闭。可以使用proxy_read_timeout指令来增加此超时时间 。或者,可以将代理服务器配置为定期发送WebSocket ping帧以重置超时并检查连接是否仍然有效。
在vue中如何使用WebSocket 以及nginx代理如何配置WebSocket的更多相关文章
- 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!
写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...
- 使用Nginx代理和转发Websocket连接
1.Websocket 简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. 2.Nginx 简介 ...
- websocket使用nginx代理后连接频繁打开和关闭
前几天开发了一个功能,使用websocket向前台发送消息,与前端联调时一切正常,但是发布到环境出现如下报错: 发现404,无法找到连接,突然想到环境上是走nginx代理的,应该是nginx没有配置代 ...
- nginx代理路径配置总结
一.发现问题 配置nginx代理的时候,发现location配置的路径和代理的上下文路径的组合不同,服务端接收到的uri的路径不同,导致了controller的RequestMapping匹配出现问题 ...
- 单机部署minio,设置Nginx代理,配置https(TLS)访问
安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...
- 记录Nginx代理的配置
server { listen 80; server_name localhost; location / { root /ect/share/nginx/html; index inde ...
- nginx 代理http配置实例
#user nginx; worker_processes ; #error_log /var/log/nginx/error.log warn; #pid /var/run/nginx.pid; e ...
- vue中打包之后的dist文件不放在服务器的根目录下
在工作当中,我使用webpack打包的dist,由于管理的问题,无法被放在服务器根目录下 ,但在目前的vue配置,dist不放在根目录下,访问页面会成为一片空白,于是便要对vue框架的config进行 ...
- 在Vue中使用JSX,很easy的
摘要:JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javasc ...
随机推荐
- Appium 简介与自动化测试环境搭建
1. Appium 简介 2. Appium 自动化测试环境搭建 1. Appium 简介 Appium 是一个开源测试自动化框架,可用于原生,混合和移动 Web 应用程序测试. 它使用 WebDri ...
- HDU 1430 关系映射 + 打表 .
题意是中文的不解释.(http://acm.hdu.edu.cn/showproblem.php?pid=1430) 思路: 这个题目直接BFS会超时的(我一开始超时了) ,如果 ...
- dex文件格式学习
一.dex文件的生成 我们可以通过java文件来生成一个简单的dex文件 编译过程: 首先编写java代码如下: (1) 编译成 java class 文件 执行命令 : javac Hello.ja ...
- LA3708墓地雕塑
题意: 有N个墓碑,等距离的分布在一个圆形墓地的周围,然后又要添加m个墓碑,最后要求所有的墓碑还是等距离,添加的墓碑可以放在任意位置,问之前的N个墓碑的最少移动距离之和是多少? 思路: ...
- hdu1828 线段树扫描线求矩形面积的周长
题意: 给你n个矩形,问你这n个矩形所围成的图形的周长是多少. 思路: 线段树的扫描线简单应用,这个题目我用的方法比较笨,就是扫描两次,上下扫描,求出多边形的上下边长和,然后同 ...
- 工具tip
1 postman: chrome的插件,模拟http的get.post等各种请求 2 010: 二进制文件查看,支持很多文件格式和强大的脚本:010 Editor体验 3 BeyondCompare ...
- MS06-040漏洞研究(中)【转载】
课程简介 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 课程介绍 实验环境: 操作机: Windows XP 实验工具: Tools Path ID ...
- 每天一道面试题LeetCode 26--删除排序数组中的重复项(python实现)
题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...
- Win10安装Ubuntu子系统(WSL)
一:设置子系统环境 关闭所有运行的程序,打开 控制面板→卸载程序→启用或关闭windows功能→勾选上适用于Linux的windows子系统 ,然后确定,完成会提示重启电脑,确定重启,等重启电脑后在操 ...
- 关于__new__和__call__的想法
__new__和__call__很像,两个都是用来产生对象的 __new__用来产生的对象是'类',class 时触发(不是) __call__用来产生的对象是'对象',这种对象无法继续产生对象,但是 ...