当前位置: 首页 > news >正文

websocket学习

1.什么是websocket

1)首先websocket和http一样,是一种网络通信协议,来自HTML5的特性;

2)他可以使客户端和服务端进行双工通信,简单来说,就是双向通信:比如我们熟悉的http协议,由客户端发起请求,通过三次握手,与服务端建立联系,并发送数据,获得相应,这是单向的,而websocket实现了服务端向客户端主动发送数据。

3)只要不主动切断联系,服务端的数据就可以一直向客户端输送,场景如:智慧交通交通系统,例如有车闯红灯了,服务端就会发送数据,在客户端发出报警信息,还有一些智慧工厂,最简单的还是我们的聊天系统,对方发送的消息可以不通过你的发起就能发送给你,这样的例子还很多。

PS:详细的学习内容自行百度推荐一个

WebSocket - Web API 接口参考 | MDN

2.使用

碰到的机会不是很多,我遇到的所有场景都是和报警或者网站告警有关系,下面就使用原生的实现:

// 首先判断浏览器是否支持
if ('Websocket' in window) {const ws = new Websocket(url);// 连接建立好之后的回调ws.onopen = (event) => {console.log("WebSocket is open now.");// 传送一些后台需要的数据(string类型或者二进制文件图片等数据)ws.send('') };// 后台返回的数据ws.on('message', (event) => {const res = JSON.parse(event.data);console.log(res);})// 关闭连接ws.close();
} else {// 浏览器不支持
}

上面代码的注释就是执行步骤,有几个点特别说一下:

1)open和message事件专门用两种写法写的,都是可行的,open是建立连接的回调,一般都在这发送信息给后台,message是后台传数据回来的方法,这写是和后台约定好的,一般都是这样;

2)最后记得关闭close(),websocket中方法直接执行的有两个,一个是send一个就是close;

3)传参过去基本都是字符串,message返回参数event.data;

3.实际开发中遇到的一些问题

首先,问题是我自己对websocket特性的不熟悉导致的,因为项目使用nginx代理,而之前调用websocket的时候都是直接写的链接,所以在想能不能代理,结果却是看到了这句话:

webSocket 没有同源限制,客户端可以与任意服务器通信

这句意味着根本不需要考虑跨域的问题,直接填写url全部就好;

然后还有一个在本地调用的时候ws://开头可以使用,而上了生产环境就不行了,这个请教了后台同事,这个就是和你的本身浏览器地址有关,需要动态更改,基础的就是这样,先写这些。

PS:websocket还有很多方法和几个常用库,都比较实用,可以试一试。

http://www.lryc.cn/news/5217.html

相关文章:

  • Java面试题及答案整理汇总(2023最新版)
  • 公司来了个卷王,我愿称之为王中王,让人崩溃
  • 波奇学c语言:代码的编译和链接
  • 计算机网络原理--传输层协议(TCP协议十大特性)
  • nvm控制node版本
  • 从0到1一步一步玩转openEuler--13 openEuler用户组管理
  • 知不知道什么叫米筐量化?怎么来的?
  • Urho3D 事件Events
  • Rust学习入门--【8】复合类型
  • 【整理六】
  • Ubuntu20.04安装MySQL5.7与远程连接
  • 【yolov5】首次尝试目标检测利用prompt(完整操作流程)
  • 三大指标继续狂飙!重庆啤酒:不惧强弱分化加剧,深耕高端市场
  • MySQL数据库14——更新和删除数据
  • Java面试——MyBatis篇
  • C++的 new 和 delete
  • MySQL 事务原理
  • 软件测试面试自我介绍/项目介绍居然还有模板?我要是早点发现就好了
  • new RegExp的使用
  • 供应商管理软件如何选型 好用的供应商管理软件推荐
  • Python3遍历文件夹提取关键字及其附近字符
  • 「1」线性代数(期末复习)
  • C++7:STL-模拟实现vector
  • 笑死,面试官又问我SpringBoot自动配置原理
  • 分布式缓存服务DCS-企业版性能更强,稳定性更高
  • HTTP基本原理
  • 【云原生】Kubernetes(k8s)最新版本详细保姆级安装教程
  • JVM - 类加载,连接和初始化
  • [carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题
  • Python 正则表达式