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:ipconst 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

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

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

相关文章

Linux下的SPI通信

SPI通信 一. 1.SPI简介: SPI 是一种高速,全双工,同步串行总线。 SPI 有主从俩种模式通常由一个主设备和一个或者多个从设备组从。SPI不支持多主机。 SPI通信至少需要四根线,分别是 MISO(主设备数据输入,从设备输出),MOSI (主设数据输出从设备输入),SCLK(时钟信号),CS/SS…

物理层——计算机网络学习笔记二

目录 物理层的基本概念 数据通信的基础知识 物理层下面的传输媒体 信道复用技术 图片大部分来源于谢希仁《计算机网络》教材配套的ppt。 这一样都是介绍一下概念性的东西,了解一下就行,就重要性而言不如后面的内容。 物理层的作用:考虑如何才…

android基础-服务

同样使用intent来传递服务 oncreate是服务第一次启动调用,onStartCommand是服务每次启动的时候调用,也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。 服务生命周期 前台服务类似于通知会…

在Linux操作系统中扩建swap容量

在Linux操作系统上创建硬盘分区不仅可以储存数据,还可以使用创建的硬盘分区去扩展机器上swap分区的大小——去扩展交换工具的容量。 有些软件对于swap分区的大小是有要求的,swap分区的大小小于多少就安装不上软件。 要扩展swap容量要么重装系统&#x…

初学者理解Transformer,本文is all you need

要问现在AI领域哪个概念最热,必然是openAI推出chatGPT之后引发的大模型。然而这项技术的起源,都来自一篇google公司员工的神作“Attention Is All You Need”——本文标题也是一种致敬^_^,目前已有近12万的引用(还在增长)。 在“Attention Is…

【教程】极简Python接入免费语音识别API

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 安装库: pip install SpeechRecognition 使用方法: import speech_recognition as srr sr.Recognizer() harvard sr…

C++:哈希表和unordered系列容器的封装

一、unordered系列关联式容器的介绍 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是&…

索引失效情况

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 一、索引列上运算操作。 不要在索引列上进行运算操作,否则索引会失效。 在tb_user的phone列加上索引,然后进行条件查询&am…

Kafka从0到消费者开发

安装ZK Index of /zookeeper/zookeeper-3.9.2 下载安装包 一定要下载-bin的,不带bin的是源码,没有编译的,无法执行。-bin的才可以执行。 解压 tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz 备份配置 cp zoo_sample.cfg zoo_sample.cfg-b…

调用 gradio 创建聊天网页报错(使用远程服务器)

文章目录 写在前面1、使用默认IP地址(失败)2、使用本地IP地址(失败)3、使用远程服务器IP地址(成功) 写在前面 我复现了github上的 llama-chinese 的工作 使用的是 llama2,环境配置是在远程服务…

指针的奥秘(二):指针与数组的联系+字符指针+二级指针+指针数组+《剑指offer》笔试题

指针 一.指针与数组的联系1.数组名的理解2.使用指针访问数组3.一维数组传参的本质 二.字符指针1.字符指针隐藏秘密2.常量字符串3.《剑指offer》笔试题 三.二级指针四.指针数组1.指针数组模拟二维数组 一.指针与数组的联系 1.数组名的理解 也许大部分人认为数组名就是一个名称&…

使用 PXE+Kickstart 批量网络自动装机

前言: 正常安装系统的话使用u盘一个一个安装会非常慢,所以批量安装的技术就出来了。 一、 概念 PXE (Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动…

如何判断nat网络?如何内网穿透

大家都清楚,如果你想开车,就必须要给车上一个牌照,随着车辆越来越多,为了缓解拥堵,就需要摇号,随着摇号的人数越来越多,车牌对于想开车的人来说已经成为奢望。在如今的IPv4时代,我们…

生信分析进阶2 - 利用GC含量的Loess回归矫正reads数量

在NGS数据比对后,需要矫正GC偏好引起的reads数量误差可用loess回归算法,使用R语言对封装的loess算法实现。 在NIPT中,GC矫正对检测结果准确性非常重要,具体研究参考以下文章。 Noninvasive Prenatal Diagnosis of Fetal Trisomy…

如何把多个文件(夹)平均复制到多个文件夹中

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 假定的情况是,共有20个兔兔的图片,想要平均的复制4个文件夹里,那么每个文件夹里面就有5个图片 (如果是5个&a…

nginx自动部署-跨操作系统

项目里面有一个需求,就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法,这样系统管理可以自动拉起来nginx,达到自动部署的目的。离线部署同样适用 这样一来,我就需要提供windows版本linux不同版本的nginx源码包&am…

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述: sql 需要能满足支持动态拼接,包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤: 1,创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计!细节非常详尽,图表丰富! - 系统架构必须采用成熟、具有国…

美食推荐网站设计

**中文摘要:**在当今信息化、网络化的时代背景下,美食文化正逐渐融入人们的日常生活,而网络平台成为人们获取美食信息、分享美食体验的重要途径。为了满足广大美食爱好者对美食信息的探索和推荐需求,本文提出了一种创新的美食推荐…

YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍,主要内容也是在目标检测任务中介绍,其他任务也只是Head层不相同。 1.YOLOv8_det网络结构 首先,YOLOv8网络分成了三部分,分别是主干网络…