下载器 -- IPC 调研(备忘) -- 2024.09.15 旧稿发布

一、需求

对于自研下载器,我们可以直接复用 Aria2c 模块中的 XML-RPC 或者调研新的 IPC 通信。

二、现状

端内集成的 Aria2c 下载器使用定制的 MaiaIPC 进行通信:http post。会存在一些问题:

  • Http 链接:N 组资源下载,需要在业务层维持 N 个 Http链接
  • 状态查询:定时主动轮询,会存在 60% 以上的无效查询。
  • 异常同步:强依赖状态查询。若不查询,则无法获取异常信息。

三、预期

新版 IPC 要能做到按需同步信息,主要是状态信息。按照现有的资源下载机制,新版 IPC 流程大致如下:

一些针对性改进:

  • 在业务层面,client只需要提前简历两个链接;downloader 也只需跟对应的两个链接通信
  • client 可以主动给 downlaoder 下发命令(暂停,继续等); downloader 也可以主动上报(状态,异常等)

四、调研

1、gRPC
库过于庞大,存在过多无用功能。暂不考虑应用在 IPC 通信。

2、Microsoft IPC
C++ 模板库。但提供的功能单一,仅支持了同步的 REQ/REP 机制。后续持续跟进,并验证可用性。

3、ZeroMQ
轻量的嵌入式IPC库。具有相对灵活的可定制性。非 Win10 或者 Win10(17063 以下)系统,只能使用 socket。不过,unix domain socket 挺香。
(注:RabbitMQ, RocketMQ, Kafka 各有其用,不在本文考虑范围内)

五、实现

使用 ZeroMQ 实现 IPC 通信功能。PUB/SUB 通信模式如下:

六、建议

  • win 10 (17063) 以下系统,只能使用 socket 进行 IPC 通信。
  • 在 windows 环境下,zmq 使用 wepoll 开源库支持 epoll。经线上实践,wepoll 存在问题。因此, windows 环境下的 polling 机制建议选择 select。

下载器 -- IPC 调研(备忘) -- 2024.09.15 旧稿发布
https://jalencui.com/2023/09/16/SDK-Downlaoder-part2/
Author
Jalen Cui
Posted on
September 16, 2023
Licensed under