WebSocket 多屏同显和异显

news2025/1/14 1:23:59

介绍

  • 多屏同显:通过在一个应用上进行操作之后,另一个应用也能跟着一起发生改变,例如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

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

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

相关文章

MLP手写数字识别(1)-MNIST数据集下载与可视化(tensorflow)

1.下载与查看MNIST数据集 from keras.datasets import mnist(x_train_image,y_train_label),(x_test_image,y_test_label) mnist.load_data() print("train images:",x_train_image.shape) print("test images:",x_test_image.shape) print("train …

83、动态规划-打家劫舍

思路: 首先使用递归方式求出最优解。从每个房屋开始,分别考虑偷与不偷两种情况,然后递归地对后续的房屋做同样的决策。这种方法确保了可以找到在不触发警报的情况下可能的最高金额。 代码如下: public static int rob(int[] nu…

【多变量控制系统 Multivariable Control System】(2)给定系统转换方程,绘制奈奎斯特图【新加坡南洋理工大学】

一、系统转换方程 系统的转换方程 G(s) 和回馈矩阵 K(s) 由下2式给出: 二、从转换方程推出系统矩阵A和B from scipy.signal import tf2ss# Convert to state-space representation A, B, C, D tf2ss([1], [1, -2, 1])print("A matrix:", A) print(&quo…

【Unity】在空物体上实现 IPointerClickHandler 不起作用

感谢Unity接口IPointerClickHandler使用说明_哔哩哔哩_bilibiliUnity接口IPointerClickHandler使用说明, 视频播放量 197、弹幕量 0、点赞数 3、投硬币枚数 2、收藏人数 2、转发人数 0, 视频作者 游戏创作大陆, 作者简介 ,相关视频:在Unity多场景同时编辑…

基于Springboot的教学资源共享平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的教学资源共享平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

VsCode | 修改首页启动页 Logo

VsCode | 修改首页启动页 Logo 最终效果: 插件的安装 先安装插件 Custom CSS and JS Loader 插件配置 Ctrl Shift P 输入 打开用户设置,在末尾添加 "vscode_custom_css.imports": [""]下载 Logo 下载 Logo 点我下载 引入…

使用D3.js进行数据可视化

D3.js介绍 D3.js是一个流行的JavaScript数据可视化库,全称为Data-Driven Documents,即数据驱动文档。它以数据为核心,通过数据来驱动文档的展示和操作。D3.js提供了丰富的API和工具,使得开发者能够创建出各种交互式和动态的数据可…

LeetCode 110.平衡二叉树(Java/C/Python3/Go实现含注释说明,Easy)

标签 树深度优先搜索递归 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡的二叉树定义为: 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。 原题:LeetCode 110.平衡二叉树 思路及…

设计模式之组合实体模式

在编程的奇幻森林里,树木与枝叶错综复杂,如何让代码世界井然有序?组合实体模式(Composite Pattern)就像一位高明的园艺师,它以一种巧妙的方式,将个体与整体统一管理,让无论是单个对象…

Android使用kts上传aar到JitPack仓库

Android使用kts上传aar到JitPack 之前做过sdk开发,需要将仓库上传到maven、JitPack或JCenter,但是JCenter已停止维护,本文是讲解上传到JitPack的方式,使用KTS语法,记录使用过程中遇到的一些坑. 1.创建项目(library方式) 由于之前用鸿神的w…

关于Clion开发stm32printf重定向问题简单解决问题方法

title: 关于Clion开发stm32printf重定向问题简单解决问题方法 tags: STM32Clion 参考来源1 这是另一种方法 在printf 重定向的基础上加上 一句 setbuf(stdout,NULL); 参考来源2 自己写的笔记啦

深入理解vector 【C++】

一、vector的介绍: 1.vector是表示可变大小的顺序容器。 2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的&am…

国产化改造之容器迁移指导(未完)

一、背景 信创即信息技术应用创新的简称,涵盖了国产软件、国产芯片以及云计算等各个方向,也可以理解为常说的“ZZKK(自主可控)”, ZZKK是指对国内企事业单位应用系统中关键软硬件部件的安全性、可靠性、性能稳定性、安全接入等方面进行评估和测试的过程。信创的发展核心就…

一对一WebRTC视频通话系列(二)——websocket和join信令实现

本系列博客主要记录WebRtc实现过程中的一些重点,代码全部进行了注释,便于理解WebRTC整体实现。 一对一WebRTC视频通话系列往期博客: 一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面 websocket和join信令…

下载Node.js及其他环境推荐nvm

文章目录 项目场景:下载Node.js环境配置配置环境变量 安装脚手架安装依赖安装淘宝镜像安装 cnpm(我需要安装)nvm 安装 Node.js (推荐) 项目场景: 提示:这里简述项目相关背景: 项目…

Java毕业设计 基于SSM SpringBoot vue宠物领养平台

Java毕业设计 基于SSM SpringBoot vue宠物领养平台 SSM 宠物领养平台 功能介绍 首页 图片轮播 新闻信息 新闻类型 新闻详情 宠物百科 宠物百科类型 宠物百科详情 宠物 宠物类型 宠物详情 立即领养 留言 论坛 发布帖子 登录 个人中心 宠物收藏 宠物领养订单 后台管理 登录注…

pymeshlab创建给定水平半径、垂直半径和水平细分以及垂直细分的圆环并保存(torus)

一、关于环境 请参考:pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考,禁止转载和引用,仅供个人学习。 # pymeshlab需要导入,其一般被命名为ml import pymeshlab as ml# 首先需…

TCP重传机制——快速重传

TCP 有一种快速重传机制,它不以时间为驱动,而是以数据驱动重传。 在上图,发送方发出了 1,2,3,4,5 份数据: 第一份 Seq1 先送到了,于是就 Ack 回 2;结果 Seq2…

Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型

概述 在2024年北京车展上,电动汽车成为全球关注的焦点之一。这一事件不仅吸引了全球汽车制造商的目光,也突显了中国市场在电动汽车领域的领先地位。117台全球首发车的亮相,其中包括30台跨国公司的全球首发车和41台概念车,彰显了中…

buuctf-misc-26.后门查杀

26.后门查杀 题目:火绒D盾查杀关键文件获取flag 下载完文件,我们可以用火绒进行查杀后门,一般解压后,火绒会自动查杀到病毒文件 病毒查杀-自定义查杀 找到了需要注意的文件,用vscode打开这个html,可以发现和md5比较相…