当前位置: 首页 > news >正文

长链接与在线文件

什么是在线文件

        常见的聊天工具,比如。。。微信,你可以发送一个文件给对端,即使对端不在线,这个文件也可以暂存在服务器上面,直到接收端上线消费或者超时,这个叫离线文件。与之对应的,在线文件要求发送方与接收方同时在线,且经由接收端同意之后,文件才开始传输。

为什么要有在线文件

        那就有人问了,为啥要有在线文件呢这还得回到离线文件上,离线文件每次必定是先从发送端发送到服务端,然后再从服务端发送到客户端,显然,这至少需要两次网络传输˙^˙。

        在线文件则不同,它不经过服务器这个中间商,直接完成点对点的传输,只需要一次网络传输;另外,如果在发送端与接收端在同个局域网,传输速度会比经过公网发送到服务器快很多倍!

如何实现在线文件

        一个可行的设计如下,主要分为两部分:长链接、在线文件。

 长链接

        长链接作为底层的通用组件抽离出来,提供可用的通信链路。我们可以按局域网/UDP优先、服务器中转次之的策略,建立多条链接:LAN_UDP、LAN_TCP、WAN_UDP、WAN_TCP、SERVER_UDP、SERVER_TCP。

        为了提升链接建立的速度,采用并发建立的方法,Client A预先获取本端的局域网ip、公网ip、以及申请的服务器中转房间号,将这些信息通过request请求发送给客户端B(这里假设A、B都在线且存在基本消息链路了)。Client B收到A的信息,则同步收集本端的局域网ip、公网ip通过accept响应发给Client A,并向服务器申请打开房间。A、B在各自收到ip信息时,也即同时向对端发起连接。

        Client A收到连接建立成功的通知后,即可开始通知业务层写入数据了,优先选择LAN_UDP的方式通信,如果该条链路不通,则尝试下一优先级的连接。业务传输完成后,连接可放入连接池,等待下一次复用。

在线文件

        在线文件是一种基于底层长链接的业务,本端发送request向对端申请传输文件,对端同意则回复accept。如果连接池没有已经建立的连接,业务层的request/accept可由长链接的request/accept捎带发送。

        长链接建立成功后,可以发送shake握手包,携带文件大小、一次传递的分片大小、md5等信息。

        对于TCP类型的链接,收发包不需要特殊处理;对于udp的链接,可以参考TCP的流量控制与拥塞控制,可以适当的对一些参数进行调整:例如慢启动初值、超时重传时间等。

相关文章:

长链接与在线文件

什么是在线文件 常见的聊天工具,比如。。。微信,你可以发送一个文件给对端,即使对端不在线,这个文件也可以暂存在服务器上面,直到接收端上线消费或者超时,这个叫离线文件。与之对应的,在线文件要…...

Python内置数据类型等入门语(句)法

内置数据类型 数字(Number)关键字: int 、float、complex字符串(String)关键字:单引号,双引号 三引号都可以表示,8 种内置类型都可转为字符串类型列表(List) 关键符号 […...

ElasticSearch之RestClient笔记

1. ElasticSearch 1.1 倒排索引 1.2 ElasticSearch和Mysql对比 1.3 RestClient操作 导入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.15.…...

饥荒Mod 开发(二二):显示物品信息

饥荒Mod 开发(二一)&#xff1a;超大便携背包&#xff0c;超大物品栏&#xff0c;永久保鲜 饥荒Mod 开发(二三)&#xff1a;显示物品栏详细信息 饥荒中的物品没有详细信息&#xff0c;基本上只有一个名字&#xff0c;所以很多物品的功能都不知道&#xff0c;比如浆果吃了也不知…...

Microsoft Edge使用方法和心得

Microsoft Edge使用方法和心得 大家好&#xff0c;我是豪哥&#xff0c;一名来自杭州的Java程序员&#xff0c;今天我想分享一下我对Microsoft Edge的使用方法和心得。作为一名热爱编程的程序员&#xff0c;我发现一个高效的浏览器对于我们的工作和学习至关重要。而Microsoft …...

Kafka操作指令笔记

查堆积用命令查&#xff1a; ./kafka-consumer-groups.sh --bootstrap-server {kafka集群地址} --describe --group {消费组名称}bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups #查看所有组别的积压情况可以通过grep、awk或其他文…...

WAVE SUMMIT+ 2023倒计时2天,传文心一言将曝最新进展!

传文心一言将曝最新进展&#xff01; 亮点一&#xff1a;趋势引领&#xff0c;“扛把子”文心一言将曝新进展亮点二&#xff1a;干货十足&#xff0c;硬核低门槛开发秘籍大放送亮点三&#xff1a;蓄势待发&#xff0c;大模型赋能产业正当时亮点四&#xff1a;群星闪耀&#xff…...

Crow:Middlewares 庖丁解牛5 context

Crow:Middlewares 庖丁解牛4 partial_context-CSDN博客 基于partial_context再来解释context namespace detail {template<typename... Middlewares>struct partial_context : public pop_back<Middlewares...>::template rebind<partial_context>, public…...

CentOS 7 设置网络

CentOS 7 设置网络 正常情况 ①登陆进去之后使用下面的命令修改文件 echo ONBOOTyes >> /etc/sysconfig/network-scripts/ifcfg-ens33②如果是虚拟机重启后使用如下命令进行查看IP地址 ip addr注&#xff1a;到这里如果显示有两部分&#xff0c;则代表网络设置成功&a…...

装饰器模式(Decorator)

装饰器模式(Decorator Pattern)是一种结构型设计模式,用于动态地给一个对象添加额外的职责。装饰器提供了一个灵活的替代扩展功能的方案,相比继承更加灵活。 在Java中,装饰器模式通常涉及以下几个部分: 组件(Component):定义一个对象接口,可以给这些对象动态添加职责…...

关于“Python”的核心知识点整理大全34

目录 第&#xff11;3 章 外星人 13.1 回顾项目 game_functions.py 13.2 创建第一个外星人 13.2.1 创建 Alien 类 alien.py 13.2.2 创建 Alien 实例 alien_invasion.py 13.2.3 让外星人出现在屏幕上 game_functions.py 13.3 创建一群外星人 13.3.1 确定一行可容纳…...

设计模式--抽象工厂模式

实验4&#xff1a;抽象工厂模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解抽象工厂模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用抽象工厂模式解决实际问题。 [实验任务]&#xff1a;人与肤色 使用抽象…...

浅析海博深造

文章目录 深造作用 留学种类 选专业 择校 申请流程 申请方式 深造作用 1、个人能力提升&#xff08;学术专业、语言、新文化或新生活方式&#xff09; 2、更好的职业发展&#xff08;起点更高、结交新朋友或扩大社交圈&#xff09; 3、北京上海落户优惠 4、海外居留福…...

【Hive_05】企业调优1(资源配置、explain、join优化)

1、 计算资源配置1.1 Yarn资源配置1.2 MapReduce资源配置 2、 Explain查看执行计划&#xff08;重点&#xff09;2.1 Explain执行计划概述2.2 基本语法2.3 案例实操 3、分组聚合优化3.1 优化说明&#xff08;1&#xff09;map-side 聚合相关的参数 3.2 优化案例 4、join优化4.1…...

synchronized

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; synchronized 1. 特性1.1 互斥1.2 可重入 …...

Vue在页面上添加水印

第一步&#xff1a;在自己的项目里创建一个js文件&#xff1b;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …...

SQL server 数据库练习题及答案(练习2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…...

minicube搭建golang容器服务

引言 最近在自己电脑上搭建一个小型k8s环境&#xff0c;以学习云原生相关内容。这里我主要分为三部分记录&#xff1a; 容器及容器编排理论环境安装相关rpcx服务实战 还在调试中&#xff0c;先总结整理下&#xff0c;这里后续补充上我的github工程链接。 一、容器及容器编排理…...

图片批量处理:图片批量缩放,高效调整尺寸的技巧

在数字媒体时代&#xff0c;图片处理已是日常生活和工作中不可或缺的一部分。有时候要批量处理图片&#xff0c;如缩放图片尺寸&#xff0c;以满足不同的应用需求。现在一起来看看办公提效式具如何高效的将图片批量处理方法&#xff0c;快速、准确地批量调整图片尺寸操作。 下…...

直接插入排序【从0-1学数据结构】

文章目录 &#x1f497; 直接插入排序Java代码C代码JavaScript代码稳定性时间复杂度空间复杂度 我们先来学习 直接插入排序, 直接排序算是所有排序中最简单的了,代码也非常好实现,尽管直接插入排序很简单,但是我们依旧不可以上来就直接写代码,一定要分析之后才开始写,这样可以提…...

BCompare_Keygen 授权激活实战指南:从评估错误到专业版授权的全面解决方案

BCompare_Keygen 授权激活实战指南&#xff1a;从评估错误到专业版授权的全面解决方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 【问题定义】Beyond Compare 评估期结束的核心痛点 当Bey…...

5款轻量级效率工具让你的文字识别效率提升300%:Umi-OCR完全指南

5款轻量级效率工具让你的文字识别效率提升300%&#xff1a;Umi-OCR完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内…...

元宇宙遗产:那些永远无法测试的AR社交漏洞

测试的疆界与永恒的盲区在软件测试领域&#xff0c;我们习惯于与已知作战。我们制定详尽的测试用例&#xff0c;模拟用户行为&#xff0c;构建自动化脚本&#xff0c;利用AI生成攻击向量&#xff0c;力求覆盖每一个可预见的边界和异常。漏洞扫描、渗透测试、模糊测试、代码审查…...

保姆级教程:在ROS Noetic下用DWA算法让无人机在已知地图里自动巡航(附完整配置文件)

无人机自主导航实战&#xff1a;ROS Noetic中DWA算法的深度配置与避坑指南 当你在Gazebo仿真环境中看着无人机缓缓升起&#xff0c;准备开始它的首次自主飞行时&#xff0c;那种期待与忐忑交织的感觉&#xff0c;想必每个ROS开发者都深有体会。本文将从实战角度出发&#xff0c…...

javaweb高校学生宿舍管理系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商高校学生宿舍管理系统功能分析学生信息管理模块宿舍分配管理模块费用管理模块报修与维修管理模块访客与门禁管理模块卫生检查与评分模块系统管理模块技术实现要点项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系…...

告别网络调试焦虑:用STM32CubeMX+FreeRTOS,给LAN8720A和LWIP做个“健康检查”与性能小优化

STM32网络子系统深度优化&#xff1a;从连通性测试到工业级稳定性实战 当你熬夜调试的嵌入式设备终于能Ping通时&#xff0c;那种喜悦感堪比程序员第一次写出"Hello World"。但很快你会发现&#xff0c;真正的挑战才刚刚开始——那些在演示视频里永远不会出现的诡异断…...

计算机专业四类毕业生就业全景对比:数据背后的残酷真相与报考抉择

数据来源&#xff1a;麦可思研究院《2025中国本科生就业报告》、教育部《2025年全国普通高校毕业生就业质量年度报告》、工信部《2025网络安全产业人才发展报告》、牛客Moka《2025春季校园招聘白皮书》、代码随想录星球薪资报告、知乎/B站等平台校招实况、CSDN/虎嗅/21经济网等…...

Local Moondream2一键部署方案:省去依赖冲突的烦恼快速运行

Local Moondream2一键部署方案&#xff1a;省去依赖冲突的烦恼快速运行 1. 项目介绍 Local Moondream2 是一个基于 Moondream2 模型构建的超轻量级视觉对话 Web 界面。它能让你的电脑真正拥有"眼睛"&#xff0c;可以对上传的图片进行智能分析。 这个工具的核心功能…...

linux下的spi子系统

概念通信模式可以分为单工、半双工和全双工&#xff0c;单工通信指信号只在一个方向上传输&#xff0c;仅 能发送或接收&#xff0c;而半双工通信指信号可以在俩个方向上传输&#xff0c;但某一个时刻只允许发送或接收&#xff0c;而全双工通信指数据同时在俩个方向上传输&…...

mysql进阶--锁

锁的概述: 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…...