WebSocket使用搭配电商数据可视化

本文介绍了如何在Node.js后端使用Koa和WebSocket,配合React实现前后端双向数据推送。讲解了WebSocket的基础使用、项目改造、单例模式应用,以及如何在React组件间传递数据和优化重连机制。
摘要由CSDN通过智能技术生成

后台使用的是node-koa(数据使用json文件),前台使用的是react

实现后台数据往前台推送

安装ws

npm i ws
基本使用
在后台创建webSocket对象
在这里插入图片描述

监听客户端发送的数据
在这里插入图片描述
使用webStocket对象的connection事件拿到前台的stocket对象再监听message对象,拿到前台发送过来的数据,也可通过client.send返回数据

前台操作

创建对象
在这里插入图片描述
这里注意连接的地址是ws://
在这里插入图片描述
在这里插入图片描述
连接成功
使用ws.send发送数据
在这里插入图片描述
使用stocket对象监听message事件拿到数据,再发到前台
在这里插入图片描述

在这里插入图片描述
后台返回一个对象,包含很多数据,比如data,比如前台的WebStocket对象。这样就完成基本的发送数据操作

这就是webstocket的基本使用(更多内容推荐阅读阮一峰老师的http://www.ruanyifeng.com/blog/2017/05/websocket.html)

改造项目

后台改造,约定字段
在这里插入图片描述
在这里插入图片描述
前端发送
在这里插入图片描述
在这里插入图片描述
拿到数据
在这里插入图片描述
一但不是获取数据,则转发
在这里插入图片描述
在一个客户端发送请求,所有客户端响应(只响应连接成功的客户端)

接着改造前端

定义一个类,使用单例模式,保证每次拿的都是同个

class SocketService {
  /**
   * 单例 保证拿到的都是同一个实例
   */
  static instance: SocketService;
  static get Instance() {
    if (!this.instance) {
      this.instance = new SocketService();
    }
    return this.instance;
  }

  baseUrl: string;
  ws: WebSocket;
  constructor(url: string = "ws://localhost: 9998") {
    this.baseUrl = url;
    this.ws = {} as WebSocket;
  }

  //和服务端创建的stocket对象

  //定义连接服务器的方法
  connect() {
    if (!window.WebSocket) {
      return console.log("您的浏览器不支持WebSocket");
    }
    this.ws = new WebSocket(this.baseUrl);

    //连接监听

    this.ws.onopen = () => {
        console.log('连接服务端成功');
    }
    this.ws.onclose=()=>{
        console.log('连接失败/关闭');
        
    }
    this.ws.onmessage = (res) => {
        console.log('从服务端获取数据', res.data);
        
    }
  }
}

export { SocketService };

单例模式
在这里插入图片描述
在这里插入图片描述
在index.tsx中引入
在这里插入图片描述
这样就就成功连接服务器并且创建了sotcket对象ws
在这里插入图片描述

我们可以通过
在这里插入图片描述
监听onmessage来拿到后台返回的数据,然后怎样传给各个页面呢?首先就是在每个组件实现一个回调函数,然后注册,当有数据返回的时候再执行该函数。
在这里插入图片描述
在这里插入图片描述
这样我们的callBackMapping就存储着个个回调函数,然后跟后端约定字段
在这里插入图片描述
就可以开始实现接收数据了,
如果是获取数据的getData
在这里插入图片描述
直接将Data传入回调函数执行

定义前端发送数据的方法

在这里插入图片描述
使用ws.send发送数据。

具体使用

正常发送http
在这里插入图片描述
在这里插入图片描述
使用websocket
在这里插入图片描述
在这里插入图片描述
可以正常使用
但也有可能出现还没连接但是发送数据了,就会出现BUG,所以要利用onopen
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
setTimeout里的是箭头函数,拿到的this是外层的this,也就是WebStocket类,然后再调用
在这里插入图片描述
特定延迟连接后
在这里插入图片描述
正常显示
优化
在这里插入图片描述
在这里插入图片描述
当一直重连时增大时间

断开重连机制

在这里插入图片描述
记录重连次数
在这里插入图片描述
关闭后尝试重连。

在这里插入图片描述
失败后一致尝试重连
打开后端
在这里插入图片描述
在这里插入图片描述
立马成功。

未完待续

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderlin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值