离线下载任务交给爱智,轻松搞定!

leecactus0 2021-12-29 16:45:09

在我们日常使用计算机的过程中,看到喜欢的资源不可避免地想把它下载到我们的设备上保存下来,比如图片,音视频资源,文档资源等。基于这种应用场景,我们来看看在爱智设备上可以如何实现。

 

技术点

  • Task 多任务

  • SigSlot 异步通信

  • Socket.IO 订阅/发布

  • WebGet 下载

     

原型设计

 

需求分析

  • 因为是离线下载,所以爱智 APP Web 端向爱智 APP Server 端发送一个请求,爱智后端启动多任务线程完成下载任务,这时候前端就可以关闭了。

  • 需要将下载的进度实时返回到前端,使用 Socket.IO 将进度推送到前端。

  • 下载任务和 Socket.IO 之间需要异步通信,使用 SigSlot。

 

什么是 SigSlot 和 WebGet

在正式开始之前,我们先来简单了解一下这个任务的两个主角,SigSlot 和 WebGet。这两个模块都是 JSRE 已经提供好的 API,直接引用。

 

01 SigSlot

SigSlot 是一个事件驱动的异步通信组件,支持多任务和多进程,这也是为什么我们这里选择使用 SigSlot 在 Task 中进行通信的原因。它继承自  EventEmitter,是一个典型的订阅和发布通信机制。

 

SigSlot 的功能还远不止于此,当应用申请开启 GSS 支持后,来自同一开发供应商的应用程序可以通过 GSS 的功能互相订阅和发布消息。

 

在这里,我们只在同一应用中的多个线程中使用它的异步通信功能。

 

02 WebGet

 

WebGet 模块用于获取 http 数据。它支持分段请求数据,以及断点续传等。通过调用 WebGet 上的 file 方法来将数据保存到文件中。可以在选项中指定数据的起始位置、每段数据的大小以及并行请求的数量。如果文件存在并且设置了 reload 为 true,WebGet 对象将检查日志并启动断点恢复过程。

 

实现过程

 

01 前端实现

前端部分是正常的发送请求,以及监听进度部分,这里给出大致的代码段,详细的内容可以参考文末附上的代码仓库。

我们这里在 onMounted 的生命周期中接收 Socket.IO 传递过来的下载进度的数据,然后更新到对应的 DataView 中。

 

02Server 端实现

Server 端部分我们主要看三个部分的内容,router 中触发下载任务:

 

我们在路由一开始就将下载的线程运行了起来,在其内部监听一个 download 的 Sigslot 任务。路由这里接收到下载的请求后,就将参数通过 Sigslot 发送到了 Task 线程。

 

接下来看一下 Task 线程中的内容:

 

 

Task 中我们只做一件事,外层 SigSlot 订阅下载任务,然后使用 WebGet.file 进行资源下载,按照需求配置分片以及断点续传等功能。WebGet.file 的回调函数返回 WebGet 对象,可以在 WebGet 对象的 data 事件中获取计算进度的数据,最后再通过 SigSlot 发布到 Socket.IO 的订阅事件中。

 

最后看返回给前端的下载进度:

 

我们在入口文件中建立 Socket 连接,在连接建立后,开始订阅在上一步的 Task 中发布的下载进度数据,再用 Socket 发布到前端。

 

到这里,我们就已经将所有环节串联了起来,整个离线下载任务就基本上完成了。只需要发送下载请求,即可把任务交个爱智来完全掌握。

 

我们还有很多不同的复杂场景,在解决问题之前,先将复杂的任务简单化,然后灵活运用 JSRE 为我们提供的丰富的 API 接口,逐个解决小任务,最终将各个环节串联合并完成整个功能。

 

参考链接:

爱智 APP 代码:https://www.edgeros.com/edgeros/example/offline_download.html

JSRE WebGet API:https://www.edgeros.com/edgeros/api/BASIC%20COMPONENTS/Network/webget.html

JSRE Task API:https://www.edgeros.com/edgeros/api/BASIC%20COMPONENTS/Multi-Task/task.html

JSRE SigSlot API:https://www.edgeros.com/edgeros/api/BASIC%20COMPONENTS/Multi-Task/sigslot.html

JSRE Socket.IO API:https://www.edgeros.com/edgeros/guide/backend/socket_io.html

...全文
350 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-前端 发布问题, 以便更快地解决您的疑问

1,582

社区成员

发帖
与我相关
我的任务
社区描述
爱智开发者平台是一个开放的物联网平台,通过爱智世界,应用开发者可以把自己的应用分发到亿万用户的设备上,硬件开发者能够把设备能力开放给海量的开发者,让优质的应用脱颖而出,为用户提供更优秀的使用体验。
边缘计算物联网javascript 企业社区
社区管理员
  • EdgerOS
  • Lumos_zbj
  • dayinfinite
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧