如何使用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.mzph.cn/news/147671.shtml

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

相关文章

后端技术知识点内容-全部内容-面试宝典-后端面试知识点

文章目录 -2 flink-1 linux of viewlinux查看占用cup最高的10个进程的命令&#xff1b; 〇、分布式锁 & 分布式事务0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#…

整理笔记——MOS管、三极管、IGBT

一、MOS管 在实际生活要控制点亮一个灯&#xff0c;例如家里的照明能&#xff0c;灯和电源之间就需要一个开关需要人为的打开和关闭。 再设计电路板时&#xff0c;如果要使用MCU来控制一个灯的开关&#xff0c;通常会用mos管或是三极管来做这个开关元件。这样就可以通过MCU的信…

Linux安装OpenCV并配置VSCode环境

Linux安装OpenCV并配置VSCode环境 安装OpenCV环境安装必需工具下载并解压OpenCV库&#xff08;Opencv Core Modules和opencv_contrib&#xff09;创建构建目录&#xff0c;进行构建验证构建结果安装验证安装结果 配置VSCode环境创建项目文件修改配置信息执行程序 安装环境 Ubun…

DRF纯净版项目搭建和配置

一、安装模块和项目 1.安装模块 pip install django pip install djangorestframework pip install django-redis # 按需安装 2.开启项目和api (venv) PS D:\pythonProject\env_api> django-admin startproject drf . (venv) PS D:\pythonProject\env_api> python ma…

pandas教程:Date and Time Data Types and Tools 日期和时间数据类型及其工具

文章目录 Chapter 11 Time Series&#xff08;时间序列&#xff09;11.1 Date and Time Data Types and Tools&#xff08;日期和时间数据类型及其工具&#xff09;1 Converting Between String and Datetime&#xff08;字符串与时间的转换&#xff09; Chapter 11 Time Serie…

Unity——URP相机详解

2021版本URP项目下的相机&#xff0c;一般新建一个相机有如下组件 1:Render Type(渲染类型) 有Base和Overlay两种选项&#xff0c;默认是Base选项 Base:主相机使用该种渲染方式&#xff0c;负责渲染场景中的主要图形元素 Overlay&#xff08;叠加&#xff09;:使用了Oveylay的…

JavaEE——简单认识HTML

文章目录 一、简单解释 HTML二、认识 HTML 的结构三、了解HTML中的相关标签1.注释标签2.标题标签3.段落标签 p4. 换行标签 br5.格式化标签6.图片标签解释 src解释 alt解释其他有关 img 标签的属性 7.超链接标签 a8.表格标签9.列表标签10.input 标签11. select 下拉菜单以及 div…

网络协议 WebSocket

一、介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输 1、HTTP协议和WebSocket协议对比 HTTP 是短连接WebSocket 是长连接H…

XSS靶场level1解题思路

001 分析题目 此时URL链接是&#xff1a; http://xss-ctf.xiejiahe.com/level1?nametest 第一关页面内容 欢迎来到level1 欢迎用户test 一张图片 IT’S easy &#xff08;它是容易的&#xff09; payload的长度:4 可以看到此时URL链接拼接了一个name参数&#xff0c;值为test…

Python (十二) 模块、包

模块 模块是以 .py后缀的文件&#xff0c;包含所有定义的函数和变量的文件。 模块可以被别的程序引入&#xff0c;以使用该模块中的函数等功能&#xff0c;如python 标准库、第三方模块等。 导入模块用关键词-import,from ...import 引入python标准库math模块 import math #调用…

【brpc学习案例实践一】rpc服务构造基本流程

前言 在crpc框架中&#xff0c;brpc简直越用越爽&#xff0c;平时工作中也常用到brpc&#xff0c;一直没来得及总结&#xff0c;抽空写点&#xff0c;也供自己查阅用。下附几个常用学习地址&#xff1a; brpc官网开源地址&#xff1a; https://github.com/luozesong/brpc/blob…

kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)

文章目录 一、前言二、windows上安装kubectl和mobaxterm2.1 准备安装包2.2 安装kubectl2.3 链接k8s集群2.4 查看某一个pod的容器日志2.5 切换context 上下文配置&#xff0c;实现在多个k8s集群间动态切换 一、前言 现如今是一个万物皆上云 的时代&#xff0c;各种云层出不穷&am…

hive sql多表练习

hive sql多表练习 准备原始数据集 学生表 student.csv 讲师表 teacher.csv 课程表 course.csv 分数表 score.csv 学生表 student.csv 001,彭于晏,1995-05-16,男 002,胡歌,1994-03-20,男 003,周杰伦,1995-04-30,男 004,刘德华,1998-08-28,男 005,唐国强,1993-09-10,男 006,陈道…

WMS重力式货架库位对应方法

鉴于重力式货架的特殊结构和功能&#xff0c;货物由高的一端存入&#xff0c;滑至低端&#xff0c;从低端取出。所以重力式货架的每个货位在物理上都会有一个进货口和一个出货口。因此&#xff0c;在空间上&#xff0c;对同一个货位执行出入库操作需要处于不同的位置。 比如对…

使用python将多个PDF文件合并成一个

使用python将多个PDF文件合并成一个 前面需求是&#xff0c;将很多PDF文章内容整合成一个PDF文件 首先你要 pip install PyPDF2 安装好这个组件库 然后使用下面的代码 from PyPDF2 import PdfReader, PdfMerger import oswk_in_file_path rD:/items_python/pdfdoc/input/ #里…

【2023年csp-j第二轮】第一题解析

我们先看题目 题目描述 小 Y 的桌子上放着 n 个苹果从左到右排成一列&#xff0c;编号为从 11到 n。 小苞是小 Y 的好朋友&#xff0c;每天她都会从中拿走一些苹果。 每天在拿的时候&#xff0c;小苞都是从左侧第 1 个苹果开始、每隔 2 个苹果拿走 1 个苹果。随后小苞会将剩下的…

PostgreSQL 数据定义语言 DDL

文章目录 表创建主键约束非空唯一约束检查约束外键约束默认值约束 触发器表空间构建表空间 视图索引索引的基本概念索引的分类创建索引 物化视图 表创建 PostgreSQL表的构建语句与所有数据库都一样&#xff0c;结构如下&#xff0c;其核心在于构建表时&#xff0c;要指定上一些…

【算法挨揍日记】day29——139. 单词拆分、467. 环绕字符串中唯一的子字符串

139. 单词拆分 139. 单词拆分 题目描述&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 解题思路&am…

(免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对线上兼职等问题&#xff0c;对线上兼职进行…

【如何学习Python自动化测试】—— 页面元素定位

接上篇自动化测试环境搭建&#xff0c;现在我们介绍 webdriver 对浏览器操作的 API。 2、 页面元素定位 通过自动化操作 web 页面&#xff0c;首先要解决的问题就是定位到要操作的对象&#xff0c;比如要模拟用户在页面上的输入框中输入一段字符串&#xff0c;那就必须得定位到…