如何使用websocket+node.js实现pc后台与小程序端实时通信

如何使用websocket+node.js实现pc后台与小程序端实时通信

  • 一、使用node.js创建一个服务器
  • 二、pc后台连接ws
  • 三、小程序端连接ws
  • 四、实现效果

实现功能:实现pc后台与小程序端互发通信能够实时检测到

一、使用node.js创建一个服务器

  • 1.安装ws依赖
npm i ws
  • 2.创建index.js
const WebSocket = require('ws')const wss = new WebSocket.Server({ port: 8888 })
const wsList = {}
console.log('服务器启动')
wss.on('connection', (ws) => {ws.on('message', (message) => {const result = JSON.parse(message)console.log('接收到的结果', result)// 页面初始化的时候,使用wsList将ws进行缓存if (result.message === 'init') {wsList[result.name] = ws} else {// 根据name的值来给指定的客户端发送信息const ws = wsList[result.name]ws.send(result.message)}})ws.on('close', () => {Object.keys(wsList).forEach((item) => {// 当websoket关闭的时候,要清空对应的wsif (wsList[item].readyState !== 1) {delete wsList[item]}})})
})
  • 3.打开终端,启动服务
node index.js

二、pc后台连接ws

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><span>P后台</span></div><input type="text" id="input" /><button id="button">发送</button><script>var ws = new WebSocket(`ws://localhost:8888`)//连接wsws.onopen = function () {ws.send(JSON.stringify({ name: 'PC', message: 'init' }))console.log('已连接')}//接收ws.onmessage = async function (mes) {console.log('pc接收到的消息', mes)}let Btn = document.getElementById('button')//发送事件Btn.onclick = function () {let ipt = document.querySelector('#input')let obj = {name: 'WX',message: ipt.value,}//需转成字符串ws.send(JSON.stringify(obj))}</script></body>
</html>

三、小程序端连接ws

这里是手动点击连接按钮,发起的websocket连接,可自行更改到其他合适的地方连接websocket

  • 1.创建两个按钮,连接按钮,发送按钮
<view @click="connect()">连接</view>
<view @click="sendSocket()">发送</view>
  • 2.定义事件,连接ws
//发送ws
sendSocket() {console.log('发送wx')uni.sendSocketMessage({data: JSON.stringify({name: 'PC',message: 'wx'})})
},
//连接ws
connect() {if (this.connected || this.connecting) {uni.showModal({content: '正在连接或者已经连接,请勿重复连接',showCancel: false,})return}this.connecting = trueuni.showLoading({title: '连接中...',})uni.connectSocket({url: 'ws://localhost:8888',success(res) {// 这里是接口调用成功的回调,不是连接成功的回调,请注意console.log('uni.connectSocket success', res)},fail(err) {// 这里是接口调用失败的回调,不是连接失败的回调,请注意console.log('uni.connectSocket fail', err)},})//监听WebSocket连接打开事件uni.onSocketOpen((res) => {console.log('监听中')if (this.pageVisible) {this.connecting = falsethis.connected = trueuni.hideLoading()uni.showToast({icon: 'none',title: '连接成功',})console.log('onOpen', res)uni.sendSocketMessage({data: JSON.stringify({name: 'WX',message: 'init'})})}})uni.onSocketError((err) => {console.log('onError', err)if (this.pageVisible) {this.connecting = falsethis.connected = falseuni.hideLoading()uni.showModal({content: '连接失败,可能是websocket服务不可用,请稍后再试',showCancel: false,})}})uni.onSocketMessage((res) => {console.log('接收到了通知', res)if (this.pageVisible) {this.msg = res.dataconsole.log('onMessage', res)}})uni.onSocketClose((res) => {if (this.pageVisible) {this.connected = falsethis.msg = ''console.log('onClose', res)}})
},

四、实现效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/193283.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酷柚易汛ERP - 盘点操作指南

1、应用场景 盘点功能是定期或临期对库存货物进行清点&#xff0c;使账面记录与实际库存相符合&#xff0c;从而随时掌握货物盈亏状态。 2、主要操作 2.1 盘点商品查询 打开【仓库】-【盘点】新增盘点单&#xff0c;筛选需要盘点的日期范围、库存及相应商品 2.2 录入盘点数…

系列七、GC垃圾回收【四大垃圾算法-标记压缩算法】

一、原理 在整理压缩阶段&#xff0c;不再对标记的对象回收&#xff0c;而是通过所有存活对象都向一端移动。可以看到&#xff0c;标记的存活对象将会被整理&#xff0c;按照内存地址依次排列。如此一来&#xff0c;当我们需要给新对象分配内存时&#xff0c;JVM只需要持有一个…

Redis篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、是否使用过 Redis Cluster 集群,集群的原理是什么?二、 Redis Cluster 集群方案什么情况下会导致整个集群不可用?三、Redis 集群架构模式有哪几种?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

TG Pro v2.87(mac温度风扇速度控制工具)

TG Pro 是适用于 macOS 的温度和风扇速度控制工具&#xff0c;可让您监控 Mac 组件&#xff08;例如 CPU 和 GPU&#xff09;的温度和风扇速度。如果您担心 Mac 过热或想要手动调整风扇速度以降低噪音水平&#xff0c;这将特别有用。 除了温度和风扇监控&#xff0c;TG Pro 还…

hive sql 行列转换 开窗函数 炸裂函数

hive sql 行列转换 开窗函数 炸裂函数 准备原始数据集 学生表 student.csv 讲师表 teacher.csv 课程表 course.csv 分数表 score.csv 员工表 emp.csv 雇员表 employee.csv 电影表 movie.txt 学生表 student.csv 001,彭于晏,1995-05-16,男 002,胡歌,1994-03-20,男 003,周杰伦,…

基于SSM的古董拍卖系统

基于SSM的古董拍卖系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 拍卖界面 管理员界面 摘要 古董拍卖系统是一个基于SSM框架&#xff08;Spring …

永久关机windows系统自动更新

1、打开cmd执行 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 3000 /f2、设置&#xff0c;打开windows更新高级选项 修改暂停日期&#xff0c;可长达十年。 3、你小子

小美的排列构造

美团2024届秋招笔试第一场编程真题 贪心问题&#xff0c;得到所有n全排列中相邻两数的和&#xff0c;这些和差距要尽可能小。 显然如果1和2排一起&#xff0c;或者让n和n-1相邻都是错误的。最好的方式是让相邻两数的和接近&#xff08;n1&#xff09;/2。 比如:n 1 n-1 2...…

取数游戏2(动态规划java)

取数游戏2 题目描述 给定两个长度为n的整数列A和B&#xff0c;每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax&#xff0c;则第i次取走的数的价值vibi⋅ax&#xff0c;现在希望你求出∑vi的最大值。 输入格式 第一行一个数T &#xff0c;表示有T 组数据。…

解锁数据安全之门:探秘迅软DSE的文件权限控制功能

企业管理者在进行数据安全管控时通常只关注到文件的加密方式&#xff0c;却忽略了以下问题&#xff1a;对于企业内部文档&#xff0c;根据其所承载的涉密程度不同&#xff0c;重要程度也不相同&#xff0c;需要由不同涉密等级的的人员进行处理&#xff0c;这就需要对涉密文档和…

python 计算最大回撤

1. 什么是最大回撤 最大回撤是评估金融产品收益的一个非常重要的风险指标&#xff0c;它指的是在选定历史周期内任一历史时点往后推&#xff0c;产品净值走到最低点时的收益率回撤幅度的最大值。 以上图为例&#xff0c; 最大回撤 ( V a l u e A − V a l u e B ) V a l u e …

6.9平衡二叉树(LC110-E)

绝对值函数&#xff1a;abs() 算法&#xff1a; 高度和深度的区别&#xff1a; 节点的高度&#xff1a;节点到叶子节点的距离&#xff08;从下往上&#xff09; 节点的深度&#xff1a;节点到根节点的距离&#xff08;从上往下&#xff09; 逻辑&#xff1a;一个平衡二叉树…