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.hqwc.cn/news/669471.html

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

相关文章

vue快速入门(五十七) 作用域插槽

注释很详细&#xff0c;直接上代码 上一篇 新增内容 作用域插槽实现表格删除数据 源码 App.vue <template><div id"app"><!-- 向子组件传值 --><MyTable :tableData"tableData"><!-- 接收子组件的传值&#xff0c;默认是对象格…

06.Git远程仓库

Git远程仓库 #仓库种类&#xff0c;举例说明 github gitlab gitee #以这个仓库为例子操作登录码云 https://gitee.com/projects/new 创建仓库 选择ssh方式 需要配置ssh公钥 在系统上获取公钥输入命令&#xff1a;ssh-keygen 查看文件&#xff0c;复制公钥信息内…

【软考高项】三十一、成本管理4个过程

一、规划成本管理 1、定义、作用 定义&#xff1a;确定如何估算、预算、管理、监督和控制项目成本的过程作用&#xff1a;在整个项目期间为如何管理项目成本提供指南和方向 应该在项目规划阶段的早期就对成本管理工作进行规划&#xff0c;建立各成本管理过程的基本框架&…

一款 NodeJS 版本管理工具 NVM (Windows)

一、简介 Node Version Manager&#xff08;NVM&#xff09;是一种用于管理多个 NodeJS 版本的工具。在日常工作中&#xff0c;我们可能同时在进行多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;依赖与不同版本的NodeJS 运行环境。这种情况下&#xff0c;维护…

cmake进阶:定义函数的内部变量

一. 简介 前一篇文章学习 cmake中的定义函数基本用法。文章如下&#xff1a; cmake进阶&#xff1a;定义函数的使用方法-CSDN博客 本文继续学习 cmake中的定义函数&#xff0c;主要学习函数的内部变量。 二. cmake进阶&#xff1a;定义函数的内部变量 上一篇文章说过&…

从算法到应用:直播美颜SDK背后的计算机视觉技术演进

背后支撑美颜功能的&#xff0c;是计算机视觉技术的不断演进和算法的不断优化。本文将带您深入探讨直播美颜SDK背后的计算机视觉技术演进之路。 美颜算法的起源 美颜算法的起源可以追溯到计算机图形学的发展。早期的美颜算法主要基于图像处理技术&#xff0c;包括模糊、锐化、…

== 和 equals()区别,equals()重写问题

对于引用类型&#xff1a;比较的是两个引用是否相同&#xff08;所指的是否为同一个对象&#xff09;&#xff0c;注&#xff1a;如果两个引用所指的对象内容一样&#xff0c;但是不是同一个对象&#xff08;hashcode不一样&#xff09;&#xff0c;依然返回false&#xff0c;随…

HttpCilent进行Post请求form-data接口,服务方接收不到参数

结论先行 生成分隔标识boundary在HttpPost中设置Header时带上boundary创建MultipartEntity时需要设置boundary 实现代码如下 /*** param url 调用接口的地址* param paramMap 调用接口传入的方法体参数*/ public static String postDataByFormData(String url, Map<Strin…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我&#xff0c;现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着&#xff0c;让我时刻感觉到&#xff0c;再过10年&#xff0c;我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高&#xff0c;我真心希望…

漏洞挖掘 | 某米企业src未授权访问

某米企业src漏洞挖掘 这一挖就挖到了一个未授权操作漏洞&#xff0c;写个文章记录下~~ 通过信息收集&#xff0c;发现这么一个资产。 访问 http://xxx.com 如下图所示 1.点击头像-点击授权登录 2.然后发现可删除大量授权的用户信息&#xff0c;总计全部1292条&#xff0c;最…

三维SDMTSP:GWO灰狼优化算法求解三维单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

灰狼优化算法的目标函数是各个旅行商路径之和 第1个旅行商的路径&#xff1a;10->18->17->22->14->4->10 第1个旅行商的总目标函数值&#xff1a;1063.936088 第2个旅行商的路径&#xff1a;10->19->25->11->15->2->10 第2个旅行商的总…

NineData亮相2024中国移动算力网络大会

4月28日至29日&#xff0c;2024中国移动算力网络大会在苏州召开。大会以“算力网络点亮AI新时代”为主题&#xff0c;全面展示了中国移动最新算力网络成果与能力。江苏省委常委、苏州市委书记刘小涛&#xff0c;副省长赵岩出席开幕式并致辞。内蒙古自治区副主席白清元出席。中国…