Push or pull?

本文对比了消息系统、配置管理中心及存储系统中Push与Pull两种模型的特点与应用场景。Push模型由服务端主动发送数据,实时性较好;Pull模型则由客户端主动拉取数据,有利于负载均衡。两者各有优缺点,需根据实际情况选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   无论是消息系统,还是配置管理中心,甚至存储系统,你都要面临这样一个选择,push模型 or pull模型?是服务端主动给客户端推送数据,还是客户端去服务器拉数据,一张图表对比如下:
 
push模型pull模型
描述服务端主动发送数据给客户端客户端主动从服务端拉取数据,通常客户端会定时拉取
实时性较好,收到数据后可立即发送给客户端一般,取决于pull的间隔时间
服务端状态需要保存push状态,哪些客户端已经发送成功,哪些发送失败服务端无状态
 客户端状态 无需额外保存状态需保存当前拉取的信息的状态,以便在故障或者重启的时候恢复
状态保存集中式,集中在服务端分布式,分散在各个客户端
负载均衡服务端统一处理和控制客户端之间做分配,需要协调机制,如使用zookeeper
其他

服务端需要做流量控制,无法最大化客户端的处理能力。

其次,在客户端故障情况下,无效的push对服务端有一定负载。

客户端的请求可能很多无效或者没有数据可供传输,浪费带宽和服务器处理能力
缺点方案服务器端的状态存储是个难点,可以将这些状态转移到DB或者key-value存储,来减轻server压力。

针对实时性的问题,可以将push加入进来,push小数据的通知信息,让客户端再来主动pull。

针对无效请求的问题,可以设置逐渐延长间隔时间的策略,以及合理设计协议尽量缩小请求数据包来节省带宽。



在面对大量甚至海量客户端的时候,使用push模型,保存大量的状态信息是个沉重的负担,加上复制N份数据分发的压力,也会使得实时性这唯一的优点也被放小。使用pull模型,通过将客户端状态保存在客户端,大大减轻了服务器端压力,通过客户端自身做流量控制也更容易,更能发挥客户端的处理能力,但是需要面对如何在这些客户端之间做协调的难题。
文章转自庄周梦蝶  ,原文发布时间2011-04-30
### 使用ADB命令进行文件推送和拉取 在Android开发过程中,`adb push` 和 `adb pull` 命令用于实现设备与计算机之间的文件传输。 #### 文件推送 (`adb push`) 此命令允许用户将本地文件发送到连接的Android设备上。具体操作如下: - 需要先启用设备上的USB调试模式,在设置中的开发者选项里开启[^1]。 - 将手机通过USB线缆连接至电脑。 - 打开电脑端的命令提示符或终端窗口。 - 利用`cd`指令切换目录至待上传文件所在位置。 - 输入并执行以下命令来完成文件传送: ```bash adb push <source_file_path> <destination_directory_on_device> ``` 例如,如果想要把名为`bootanimation.zip` 的文件推送到 `/data/local/` 路径下,则应输入: ```bash adb push bootanimation.zip /data/local/ ``` 这会将位于当前工作目录下的`bootanimation.zip` 发送至指定的目标路径。 #### 文件拉取 (`adb pull`) 该功能是从已连接的Android装置获取特定文件保存到主机系统内。其基本语法为: ```bash adb pull <file_or_directory_on_device> <local_destination_path> ``` 假设希望从设备中提取相同名称(`bootanimation.zip`)的压缩包存放到C盘根目录下,那么应当运行这样的语句: ```bash adb pull /data/local/bootanimation.zip C:\ ``` 上述过程同样适用于批量下载整个文件夹的内容;只需提供相应的源地址即可。 值得注意的是,虽然这些操作看似简单直接,但实际上背后涉及到了较为复杂的通信机制以及数据同步逻辑等问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值