WebSocket 实现数据实时刷新

2023-05-16

WebSocket 是HTML5的一个新协议,WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

一、浏览器客户端

创建一个WebSocket 对象

浏览器通过 javascript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

//var ws= new WebSocket(url, [protocol] );  //参数 url, 指定连接的 URL。参数 protocol 是可选的,指定了可接受的子协议
var ws= new WebSocket('ws://127.0.0.1:8088')

微信小程序创建一个 WebSocket 连接稍有不同,具体可以参考小程序文档

//小程序创建 WebSocket 连接
wx.connectSocket(Object object)
//示例代码
var ws = wx.connectSocket({
  url: 'wss://example.qq.com',
  header:{
    'content-type': 'application/json'
  },
  protocols: ['protocol1']
})
//小程序接收数据事件
ws.onMessage(data=>{
  console.log(' 返回数据'+ data.data)
})
//更多请查看小程序文档
WebSocket 属性

假定我们刚使用了以上代码创建了 Socket 对象,可以通过ws.readyState查看链接的状态

ws.readyState    只读属性 readyState 表示连接状态
 0:表示连接尚未建立。
 1:表示连接已建立,可以进行通信。
 2:表示连接正在进行关闭。
 3:表示连接已经关闭或者连接不能打开。
WebSocket 事件

当你获取 Web Socket 连接后,你可以通过send()方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据等。

// 客户端和服务端建立链接时触发,此时可向服务端传递参数
  ws.onopend = function () {
    ws.send('发送数据')
  }
  // 客户端收到服务端发来的消息时,会触发onmessage事件,参数res.data中包含server传输过来的数据
  ws.onmessage = function (res) {
    console.log('接收数据:'+res.data);
  }
 //客户端收到服务端发送的关闭连接的请求时,触发onclose事件
  ws.onclose = function () {
    console.log('链接关闭');
  }
 //如果出现连接,处理,接收,发送数据失败的时候就会触发onerror事件
  ws.onerror = function () {
    console.log('链接发生错误');
  }
WebSocket 方法

客户端和服务器端的 WebSocket 连接建立起来后,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接

ws.send();    //使用连接发送数据
ws.close();    //关闭socket链接

二、服务端

我们用本地电脑使用node搭建一个WebSocket服务器, 示例模拟随机生成数据向客户端不间断传递数据

1、搭建WebSocket服务器

①新建 nodeServer 文件夹
②用命令行 npm init 在当前文件夹内进行初始化,随即生成package.json文件

npm  init

③在使用nodejs搭建WebSocket 时需要用到WebSocket 模块,因此要安装ws模块,
装好之后可以在package.json文件中查看有无安装成功

npm i ws --save

④在当前文件夹内新建index.js文件, 在index.js中引入依赖并创建WebSocket 服务器
当前WebSocket 服务器只为了模拟数据使用并未加密使用wss协议等

//index.js
const WebSocket = require('ws')   //引入ws
const Wss = new WebSocket.Server({port: 8088})   //创建WebSocket 服务器并生成实例

⑤启用WebSocket 服务器,在nodeServer文件夹下使用命令node index.js启用,使用键盘’ctrl+c’停止

node index.js  //启用WebSocket 服务器

⑥当前本地WebSocket 服务器的路径则是'ws://localhost:8088'或者'ws://127.0.0.1:8088'

url:'ws://localhost:8088'  //此路径即是客户端连接的路径或者
2、服务端–模拟随机生成数据向客户端不间断传递数据

情景模拟:将腾讯、百度、阿里股票实时信息发送给客户端。
先默认初始三只股票值,然后通过定时器将股票值随机增减生成新的值发送给客户端

//当前页index.js
const WebSocket = require('ws')  //引入ws
const Wss = new WebSocket.Server({port: 8088})  //创建WebSocket 服务器并生成实例
//初始三只模拟股票值
let stocks = {
  baidu: 80,
  tencent: 100,
  alibaba: 120,
}
//创建指定区间的随机数
function randomInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min
}
//给原始值增加或减少成随机数
function randomStockUpdate() {
  for (let stock in stocks) {
    let randomValue = randomInteger(-80, 80) / 100 //随机生成小数
    stocks[stock] = (new Number(stocks[stock]) + randomValue).toFixed(3) //转换成数字然后保留3位小数
  }
  console.log(stocks)  //打印结果
  //每一秒更新一次数据
  setTimeout(() => {
    randomStockUpdate()
  }, 1000)
}

randomStockUpdate() //调用

//监听客户端,一旦发起向服务端请求连接即通过定时器模拟每1秒返回一次数据
Wss.on('connection', ws => {
  setInterval(() => {
    ws.send(JSON.stringify(stocks))
  }, 1000)
})

通过node index.js命令启动服务器可查看服务器端打印结果

打印结果
3客户端–建立WebSocket 实现数据实时刷新

   
   

   
   

   
   
模拟WebSocket 实现数据实时刷新

   
   

建立连接后客户端可查看输出结果

输出结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSocket 实现数据实时刷新 的相关文章

  • vue实现websocket断线重连

    下面有demo和注释 span class token tag span class token tag span class token punctuation lt span template span span class token
  • 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun-dav

    感觉网络上很多的东西 xff0c 不那么复杂的 xff0c 是没有教程让它变复杂 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun dav xff0c 这很正常的需求吧 xff0c 只有固件打包在里面的 xff0c 没有手动安装
  • 多主机IIC系统中时钟同步及仲裁

    两个主机可以同时开始在空闲总线上进行传输 xff0c 并且必须有一种方法来确定控制总线并完成数据传输 xff0c 这是通过时钟同步和仲裁完成 在单主机系统中 xff0c 不需要时钟同步和仲裁 时钟同步是通过I2C接口中SCL线的线与实现 x
  • ros-机器人URDF建模问题

    參考這篇文章 xff0c 分分钟解决问题 xff0c 感谢博主 参考链接 xff1a https blog csdn net m0 46259024 article details 105333552 这里总结一下出现的问题 问题1 ros
  • Ubuntu16.04vscode打不开的问题

    1 问题描述 我第一次在这位博主点击这里的教程下尝试去安装vscode xff0c 但是呢他是用wget的方式按装的 xff0c 后来设置也不好弄 xff0c 但是这个时候其实vs已经可以打开了 可是我把图标设置到桌面上 xff0c 直接点
  • rbx1运行出错

    xacro Traditional processing is deprecated Switch to inorder processing To check for compatibility of your document use
  • ubuntu18.04中解决无法创建文本文件问题

    ubuntu18 04无法创建文本文件问题 1 打开文件夹 xff0c 在用户主目录里找到 模板 文件夹打开并打开模板终端 2 输入 xff08 sudo gedit 文本文件 xff09 会弹出一个空白文本文件 xff0c 点击保存 3
  • 2.4电池电量的显示

    一 ui界面设计 打破布局 xff1a mainwindowDesgin 然后继续添加几个label用于显示电量提示信息等 导入resources图片资源文件 xff1a 首先把图片以及相关的资源文件copy到resources文件夹下 x
  • 2.5订阅图像话题并显示

    出错了 xff0c 一直找不到rviz config cmake配置文件 重新创建一个工作空间又好了 xff0c 奇怪的一批 xff0c 估计又是工作空间的问题 首先添加依赖 xff0c 包含头文件 ui界面设计 对显示图片的那个label
  • ROS Rviz组件开发方法 3.1

    首先我们先进行ui设计 xff1a 在两个主页面添加两个页 xff0c 名称改为rviz xff0c 在curentTabText里面修改 然后在电池电量下面那个rviz的页面中加入一个treewidget 给他纵向布局 xff0c 修改大
  • 3.2加载RVIZ常用的Display

    前面基本的gird图形设计好了 xff0c 接下来就是去设置gird的图层属性 xff0c 在qrviz hpp中声明一个接口函数 xff1a void Display Grid int Cell Count QColor color bo
  • 树莓派

    树莓派资料大全 xff1a 树莓派资料大全 xff1a
  • 远程连接服务器无法拷贝本地文件解决

    方法一 让远程服务器访问本地文件 1 点击开始 gt 程序 gt 附件 gt 远程桌面连接 xff08 或者Win 43 R xff0c 输入mstsc xff09 xff0c 打开 远程桌面连接 菜单 xff0c 点击 选项 按钮 xff
  • 3-linux文件系统常用命令

    1 查看目录下文件 ls l a 带上参数 a则显示隐藏文件 xff0c 隐藏文件的特点是在文件名前多出一个点 l a 都是短选项 xff0c 短选项后面只能跟一个字符 xff0c 所以可以写在一起 xff1a la 长选项例如 xff1a
  • (一)我们编写的代码如何在计算机上运行

    目录 1 计算机指令 2 代码执行过程 3 函数执行的原理 4 我们写的代码如何编译链接 xff0c 被加载到内存并执行 4 1 背景 4 2 问题 4 3 解决方案 4 4 编译 gt 链接 gt 装载 4 5 程序如何加载到内存 4 6
  • 51单片机工作于方式0的定时器模式

    51单片机的 模式0 xff08 13位定时器 计数器 xff09 第一步 xff1a 通过设置TMOD中的M1 M0位设置 xff0c 即可完成模式选择 00 为 模式0 xff08 13位定时 计数模式 xff09 01 为模式1 xf
  • Linux系统下的root用户初始密码设置及用户切换方法

    导读 在安装好Linux或Ubuntu这类开源系统后 xff0c 默认启用的帐号是我们在安装系统时创建的帐号 xff0c 有时候我们在执行一下操作时 xff0c 发现权限不够 xff0c 通常我们就会切换到 root 用户上去执行相关的操作
  • win10安装visual studio 2015 出现安装包丢失或损坏是什么原因?

    作者 xff1a xiaoma 链接 xff1a https www zhihu com question 33643147 answer 252040460 xff08 觉得有帮助的 xff0c 一定要顶上去 让更多人看到 下面图片是我从
  • nginx --增加 headers-more-nginx-module

    已经编译好的编nginx需要添加headers more nginx module模块来自定义响应头 1 需要下载headers more nginx module wget https span class hljs comment gi
  • btrfs snapshot快照与回滚

    拍快照是 btrfs subvolume snapshot source dir dest dir snapshot name 回滚方式 xff1a 将原目录更名mv source dir source dir back 利用快照目录再次快

随机推荐

  • 简单方便的linux定时任务管理器——supervisor

    背景 我们在linux服务器上部署模型或者一个长期运行的程序的时候 xff0c 通常使用的是nohup方法 xff0c 因为nohup真的非常简单 xff0c 只需要一行命令即可 xff0c 但是nohup不好的地方就在于无法监控 xff0
  • HTTP、HTTPS等常用的默认端口号

    最近部署一个接口访问对方域名 xff0c https开头Url 端口配成80 xff0c 犯了个低级错误 重新学习一下 端口号标识了一个主机上进行通信的不同的应用程序 1 xff0c HTTP服务器 xff0c 默认端口号为80 tcp x
  • Msg3.0.db可以删吗?一招教你释放C盘50个G空间!

    相信很多朋友经常遇到C盘爆满的时候 xff0c 网上很多方法解决的并不彻底 xff0c 而且很多时候不具有通用性 今天给大家介绍一下如何使用WinDirStat来快速释放自己的硬盘 xff01 WinDirStat 这款神器自己可以自行百度
  • dpkg介绍

    dpkg dpkg a medium level package manager for Debian With dpkg set selections you can set which packages are to be instal
  • 【常用算法】辗转相除法求最大公约数

    辗转相除法 xff0c 又称欧几里德算法 xff08 Euclidean Algorithm xff09 xff0c 是求两个数的最大公约数 xff08 greatest common divisor xff09 的一种方法 用较大的数除以
  • Python人工智能之图片识别,Python3一行代码实现图片文字识别

    自学Python3第5天 xff0c 今天突发奇想 xff0c 想用Python识别图片里的文字 没想到Python实现图片文字识别这么简单 xff0c 只需要一行代码就能搞定 作者微信 xff1a 2501902696 from PIL
  • 动态模型

    1 动态模型 1 1 说明 动态模型是指模型的属性是不固定的 xff0c 可以添加和变更 xff1b 也指不同模型 xff0c 可以增加模型 不同模型在存储上为了性能和隔离 xff0c 使用不同的表 但逻辑编写为了复用 xff0c 一般使用
  • axios请求数据的格式(create)

    post请求 请求的路径 http localhost 9528 dev api admin acl user save 数据格式 xff1a form对象 xff0c 数据在请求体里面 user js文件中 export const re
  • Linux查看mysql使用的是哪个my.cnf

    1 查看是否使用了指定目录的my cnf ps aux grep mysql grep 39 my cnf 39 2 查看mysql默认读取my cnf的目录 mysql help grep 39 my cnf 39 会按顺序加载 3 启动
  • 使用C#跨PC 远程调用程序并显示UI界面

    在项目中有一个需求是需要在局域网内跨PC远程调用一个程序 xff0c 并且要求有界面显示 xff0c 调查了一些资料 xff0c 能实现远程调用的 Net技术大概有PsExec WMI Schedule Task 这三种方式都做了一个尝试
  • Android 获取设备唯一号 unknown

    Android 获取设备唯一号 unknown 问题 xff1a 使用 Build SERIAL 获取设备唯一号时有些机型会返回 39 unknown 39 原因 xff1a 在Android O以后 android os Build SE
  • C++ string类如何format(格式化)字符串

    string类的使用 很遗憾 xff0c string类并没有提供关于format 格式化 字符串的操作 xff0c 但是我们可以借助其他方法来实现 方法一 xff08 推荐 xff09 xff1a ostringstream类实现 ost
  • Codeforces加速访问及其他编程比赛平台推荐

    最近在学习算法 xff0c 刷题 学的差不多准备去比赛试一试 这里分享一些平时比赛平台 文章的开始先给大家推荐一个公众号 小辅导 互联网开发者 多年一线程序开发经验 不定期分享各类资源 https mp weixin qq com s Gq
  • IOS开发UIScrollView控件详解

    首先实现UIScrollViewDelegate协议 xff1a plain view plain copy import lt UIKit UIKit h gt 64 interface Activity01ViewController
  • 【测试开发】几种常见的自动化测试框架

    几种常见的自动化测试框架 在软件测试领域 xff0c 自动化测试框架有很多 xff0c 这里主要介绍几种常用的自动化测试框架 1 pytest pytest 是 Python 的一种单元测试框架 xff0c 与 Python 自带的 uni
  • MPV 快捷键

    按键功能RIGHT前进 5 秒LEFT后退 5 秒UP前进 60 秒DOWN后退 60 秒 0 9091 倍速播放 1 1 倍速播放 0 5 倍速播放 2 0 倍速播放Backspace还原到 1 0 倍速Space 或 p播放 暂停 下一
  • 清除DNS 缓存记录

    original link http www linuxfly org post 543 为了提高DNS 解析的记录 xff0c 很多操作系统都会提供缓存DNS 记录的功能 xff0c 但是 xff0c 这可能会为测试DNS 服务或域名设定
  • Jetson TX2更换软件源

    TX2的软件源为国外服务器 xff0c 网速会很慢 xff0c 需要换国内的ARM源 备份 etc lib路径下的source list文件 xff0c 然后在终端 xff08 按ctrl 43 alt 43 T打开 xff09 执行以下命
  • python和Microsoft Visual C++ Build Tools版本安装

    在windows环境下 xff0c python需要调用Microsoft Visual C 43 43 compiler编译器 xff0c 尤其是在安装第三方包时候 xff0c 会build项目 xff0c 这时如果没有安装或者安装不协调
  • WebSocket 实现数据实时刷新

    WebSocket 是HTML5的一个新协议 xff0c WebSocket 使得客户端和服务器之间的数据交换变得更加简单 xff0c 允许服务端主动向客户端推送数据 在 WebSocket API 中 xff0c 浏览器和服务器只需要完成