IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> webworker+websocket实现独立多个连接,断线重连 -> 正文阅读

[网络协议]webworker+websocket实现独立多个连接,断线重连

业务场景是实现随意连接,关闭多个传感器,考虑到各个互不影响,并且传感器数据并发很高,这里采用标题的方式进行封装组件。实现效果达到父组件只负责传入要连接的传感器数组,子组件完成连接并展示图表。

socket_worker.js:

var reconnect_count = 1;
var socket = null;

const socketWork = `
? ? function createWebsocket(url,id){
? ? ? socket = new WebSocket(url);
? ? ? socket.onopen = function(event) {
? ? ? ? ? if (socket == null) return;
? ? ? ? ? socket.send("SensorCommonId"+":"+id);
? ? ? ? ? postMessage({
? ? ? ? ? ? code: "open" ,
? ? ? ? ? ? message :"连接中..."
? ? ? ? ? });
? ? ? }
? ? ? socket.onclose = function(event) {
? ? ? ? ? postMessage({?
? ? ? ? ? ? code: "close",
? ? ? ? ? ? message :"连接关闭"
? ? ? ? ? });
? ? ? }
? ? ? socket.onmessage = function(event) {
? ? ? ? ? postMessage({
? ? ? ? ? ? code: "onmessage" ,
? ? ? ? ? ? message :"获取数据成功",
? ? ? ? ? ? data:event.data
? ? ? ? ? });
? ? ? }
? ? ? socket.onerror = function(event) {
? ? ? ? ? socket = null;
? ? ? ? ? if(reconnect_count <= 3){
? ? ? ? ? ? if (event.target.readyState == 3) {
? ? ? ? ? ? ? //断线重连
? ? ? ? ? ? ? ? setTimeout(function () {
? ? ? ? ? ? ? ? ? ? createWebsocket(event.target.url,id);
? ? ? ? ? ? ? ? ? ? reconnect_count += 1
? ? ? ? ? ? ? ? ? ? postMessage({
? ? ? ? ? ? ? ? ? ? ? code:"reconnect",
? ? ? ? ? ? ? ? ? ? ? message:"第" + reconnect_count + "次重新连接"
? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? }, 1000);
? ? ? ? ? ? }
? ? ? ? ? }else{
? ? ? ? ? ? postMessage({
? ? ? ? ? ? ? code:"error",
? ? ? ? ? ? ? message:"连接失败"
? ? ? ? ? ? });
? ? ? ? ? }
? ? ? ? ??
? ? ? }
? ? }

? ??

? ? onmessage = function (e) {
? ? ? let data = e.data;
? ? ? createWebsocket(data.params.url,data.params.id)
? ? };

? ??
`;

export {
?? ?socketWork
}

调用worker

initWorker(){
? ? ? ? ? ? var blob = new Blob([socketWork]);
? ? ? ? ? ? this.myWorker = new Worker(window.URL.createObjectURL(blob));
? ? ? ? ? ? this.myWorker.onmessage = (e)=> {
? ? ? ? ? ? ? ? if(e.data.code != 'onmessage'){
? ? ? ? ? ? ? ? ? this.myChart.showLoading({
? ? ? ? ? ? ? ? ? ? text: e.data.message,
? ? ? ? ? ? ? ? ? ? color: '#c23531',
? ? ? ? ? ? ? ? ? ? textColor: '#000',
? ? ? ? ? ? ? ? ? ? maskColor: 'rgba(255, 255, 255, 0.8)'
? ? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? this.myChart.hideLoading();
? ? ? ? ? ? ? ? ? this.initDatas(JSON.parse(e.data.data));

? ? ? ? ? ? ? ? ? ? //到这一步已经拿到数据了,剩下的交给你了,大兄弟,记得在beforeDestroy中释放worker
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ??
? ? ? ? ? ? };
? ? ? ? ? ? this.myWorker.postMessage({
? ? ? ? ? ? ? code:"init",
? ? ? ? ? ? ? params:{
? ? ? ? ? ? ? ? url:websocketUrl,
? ? ? ? ? ? ? ? id:this.params.SensorCommonId
? ? ? ? ? ? ? }
? ? ? ? ? ? });
? ? ? ? ? },

结尾:其实worker还是挺适合做这种轮询动作或者需要大数据计算的活,大兄弟可以多试试,解锁新姿势

来张图吧,显得我很真诚。

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:49:11  更:2021-10-30 12:50:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:41:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码