WebSocket 多屏同显和异显

介绍

  • 多屏同显:通过在一个应用上进行操作之后,另一个应用也能跟着一起发生改变,例如app1播放了晴天这首音乐,那么app2也要同步播放这首音乐,确保所有屏幕显示的内容完全相同。
  • 多屏异显:每个屏幕可以显示不同的内容,或者在内容更新时存在一定的延迟,而不需要严格保持同步。

实现方案

可以使用WebSocket全双工通信来进行数据的实时传递,延迟低。
WebSocket和Socket对比:

  1. WebSocket:
  • 用途:WebSocket 是一种在 Web 应用程序中实现实时双向通信的协议。它允许客户端和服务器之间建立持久性的连接,并且可以在任何时候双向传输数据,而不需要客户端发起请求。
  • 特点:
    • 全双工通信: WebSocket 支持全双工通信,客户端和服务器可以同时发送和接收数据。
    • 低延迟: WebSocket 建立在 TCP 连接之上,因此具有低延迟的特点,适用于实时通信场景。
    • 协议层封装: WebSocket 协议在 HTTP 协议之上建立了自己的通信协议,允许在相同的连接上进行数据交换。
  • 适用场景: 适用于需要实时双向通信的 Web 应用程序,如在线游戏、聊天应用、实时数据展示等。
  1. Socket:
  • 用途:Socket 是一种在网络中进行通信的抽象概念,它可以用于各种不同的场景和协议,包括 TCP 和 UDP。
  • 特点:
    • 灵活性: Socket 提供了灵活的编程接口,可以进行各种类型的网络通信,包括单向和双向通信。
    • 面向连接: TCP Socket 是面向连接的,需要在客户端和服务器之间建立连接后才能进行通信,而 UDP Socket 则是无连接的。
    • 直接操作网络层: Socket 允许直接操作网络层的数据传输,可以更灵活地控制数据的传输和处理。
  • 适用场景: 适用于需要直接操作网络层或进行低级别网络通信的应用程序,如网络服务器、P2P 应用、实时音视频传输等。

流程图

业务流程图

时序图

代码实现

WebSocket官网:https://github.com/websockets/ws
自定义请求体:

{
   
  ips:[],
  data:null
}

上述的ips是一个ip数组,服务器根据遍历每个ip将数据data转发到对应的应用中,从而实现多屏同显和异显

创建WebSocket服务器

主要用来监听、处理请求。

初始化npm项目

npm init -y

安装ws依赖

npm install ws

目录结构

image.png

index.js

const WebSocket = require('ws');

// 创建 WebSocket 服务器监听在 8080 端口
const wss = new WebSocket.Server({
   
	port: 8081
});

// 用于存储所有连接的客户端
const clients = [];
// 防止重复连接
const ipSet = new Set();

// 当有客户端连接时
wss.on('connection', function connection(ws, req) {
   
  // 获取客户端http://host:ip
	const origin = req.headers.origin;
  // 判断set中是否存在该客户端
	if (!ipSet.has(origin)) {
   
		ipSet.add(origin);
		console.log('client connected', origin);
    // 将origin赋值给ws的ip,后面转发数据要用
		ws.ip = origin;
		clients.push(ws);
		console

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis 使用 XML 文件映射

在MyBatis中 我们可以使用各种注解来配置我们Mapper 类中的方法 我们为什么要使用XML文件呢? 如果我们是一条非常长的SQL 语句 使用 注解配置的话, 会非常不利于阅读 如下 所以,就需要使用到一个XML文件来对SQL语句进行映射,那么 …

力扣763. 划分字母区间

Problem: 763. 划分字母区间 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建一个名为 last 的数组,用于存储每个字母在字符串 s 中最后出现的位置。然后,获取字符串 s 的长度 len。 2.计算每个字母的最后位置:遍历字符串 s&#xff0…

(五)SQL系列练习题(上)创建、导入与查询 #CDA学习打卡

目录 一. 创建表 1)创建课程表 2)创建学生表 3)创建教师表 4)创建成绩表 二. 导入数据 1)导入课程科目数据 2)导入课程成绩数据 3)导入学生信息数据 4)导入教师信息数据 …

RocketMQ SpringBoot 3.0不兼容解决方案

很多小伙伴在项目升级到springBoot3.0版本以上之后,整合很多中间件会有很多问题,下面带小伙伴解决springBoot3.0版本以上对于RocketMQ 不兼容问题 报错信息 *************************** APPLICATION FAILED TO START *************************** Des…

电脑崩溃了,之前备份的GHO文件怎么恢复到新硬盘?

前言 之前咱们说到用WinPE系统给电脑做一个GHO镜像备份,这个备份可以用于硬盘完全崩溃换盘的情况下使用。 那么这个GHO镜像文件怎么用呢? 咱们今天详细来讲讲! 如果你的电脑系统硬盘崩溃了或者是坏掉了,那么就需要使用之前备份…

ubuntu 小工具

随着在专业领域待得越久,发现总会遇到各种奇怪的需求。因此,这里介绍一些ubuntu上的一些小工具。 meld 对比文件 sudo apt-get install meld sudo apt --fix-broken install # maybeHow to compare two files

pytorch笔记:ModuleDict

1 介绍 在 PyTorch 中,nn.ModuleDict 是一个方便的容器,用于存储一组子模块(即 nn.Module 对象)的字典这个容器主要用于动态地管理多个模块,并通过键来访问它们,类似于 Python 的字典 2 特点 组织性 nn…

《金融研究》:普惠金融改革试验区DID工具变量数据(2012-2023年)

数据简介:本数据集包括普惠金融改革试验区和普惠金融服务乡村振兴改革试验区两类。 其中,河南兰考、浙江宁波、福建龙岩和宁德、江西赣州和吉安、陕西铜川五省七地为普惠金融改革试验区。山东临沂、浙江丽水、四川成都三地设立的是普惠金融服务乡村振兴…

可视化大屏应用(20):智慧水务、水利、防汛

hello,我是大千UI工场,本篇分享智智慧水务的大屏设计,关注我们,学习N多UI干货,有设计需求,我们也可以接单。 在智慧水务领域,可视化大屏具有以下几个方面的价值: 数据展示和监控 可…

华为手机 鸿蒙系统-android studio识别调试设备,开启adb调试权限

1.进入设置-关于手机-版本号,连续点击7次 认证:有锁屏密码需要输入密码, 开启开发者配置功能ok 进入开发者配置界面 打开调试功能 重新在androd studio查看可运行running devices显示了, 不行的话,重启一下android …

开源版本管理系统的搭建一:SVN

作者:私语茶馆 1.Windows搭建SVN版本管理系统 1.1.SVN概要和组成 背景介绍 Svn是一个开源版本管理系统,由CollabNet公司于2000年发布,23年12月发布最新版本Apache Subversion 1.14.3。官方网站:Apache Subversion。 Svn可以直…

npm install报错

总结:没有安装visual studio 2017以上带有C桌面开发的版本 #开始试错 #报错总信息mingw_x64_win版本 百度网盘链接: link 提取码:3uou #尝试用mingw配置个C编译器,并配置环境变量,失败 #只认可使用VS!GIthub原址: 链接: link 上…

「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解

CycloneDX是软件供应链的现代标准。CycloneDX物料清单(BOM)可以表示软件、硬件、服务和其他类型资产的全栈库存。该规范由OWASP基金会发起并领导,由Ecma International标准化,并得到全球信息安全界的支持,如今CycloneD…

thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程

介绍 thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程 上门预约服务派单小程序家政小程序同城预约开源代码独立版安装教程 程序完整,经过安装检测,可放心下载安装。 适合本地的一款上门预约服务小程序&#xff0…

YOLOv5手势物体识别(附代码)

之前是做的yolov3手势物体识别,最近几天我将该项目进行了重新的整理和升级,实现了yolov5手势物体识别,同时为了方便更多的人直接拿来应用,我生成了支持windows系统的应用小程序,即便你电脑上没有安装pytorch,没有安装c…

Web Storage 笔记12 操作购物车

相关内容:购物车实例 WebStorage存储空间足够大,访问都在客户端(Client)完成。有些客户端先处理或检查数据,就可以直接使用WebStorage进行存储,不仅可以提高访问速度,还可以降低服务器的练习。负担。例如,购…

【linux】重定向

重定向 什么是重定向如何实现一个简单的重定向关于重定向的系统调用接口 注意:在看这篇博客之前,最好是要对文件在系统中是如何被打开的以及操作系统是如何管理文件有一个初步了解,如果不了解的话,可以看看这篇博客《初步认识文件…

PyTorch如何修改模型(魔改)

文章目录 PyTorch如何修改模型(魔改)1.修改模型层(模型框架⭐)1.1通过继承修改模型1.2通过组合修改模型(重点学👀)1.3通过猴子补丁修改模型 2.添加外部输入3.添加额外输出参考 PyTorch如何修改模型(魔改) 对模型缝缝补…

一加12/11/10/Ace2/Ace3手机上锁回锁BL无限重启黑屏9008模式救砖

一加12/11/10/Ace2/Ace3手机官方都支持解锁BL,搞机的用户也比较多,相对于其他品牌来说,并没有做出限制,这也可能是搞机党最后的救命稻草。而厌倦了root搞机的用户,就习惯性回锁BL,希望彻底变回官方原来的样…

QT:输入类控件的使用

LineEdit 录入个人信息 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QString>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 初始化输入框ui->lineEdit…