[摘] Push and Pull

哲学家说: 世界充满了矛盾.

软件工程师说: 世界充满了2面性, 矛盾仅仅是2面性泛化出来的特殊关系.

 

如果你想更好地解决问题, 起始点就是要看清问题的2(多)面性, 并思考解决方案的多面性. 

对于软件开发人员来说, 我们对于Push模式应该再熟悉不过了, 方法的调用, 参数的传递都属于这类. 下面是简单介绍(大部分来源于网络):

1. 定义

1.1 推(push)模式是一种基于客户器/服务器机制、由服务器主动将信息送到客户器的技术, 当通知消息来之时, 把所有相关信息都通过参数的形式“推给”观察者.

1.2 拉(pull)模式与推模式相反,是由客户器主动发起的事务, 当通知消息来之时,通知的函数不带任何相关的信息,而是要观察者主动去“拉”信息.

2. 性质

2.1 在push模式应用中,服务器把信息送给客户器之前,并没有明显的客户请求。push事务由服务器发起。push模式可以让信息主动、快速地寻找用户/客户器,信息的主动性和实时性比较好。但精确性较差,可能推送的信息并不一定满足客户的需求。推送模式不能保证能把信息送到客户器,因为推模式采用了广播机制,如果客户器正好联网并且和服务器在同一个频道上,推送模式才是有效的。push模式无法跟踪状态,采用了开环控制模式,没有用户反馈信息。在实际应用中,由客户器向服务器发送一个申请,并把自己的地址(如IP、port)告知服务器,然后服务器就源源不断地把信息推送到指定地址. 推模式的优点是当消息来临时,观察者很直接地都到信息,然后进行相关地处理,与被观察者没有一点联系,两者几乎没有耦合。推模式的缺点是当消息来临时,所有的信息都强迫观察者,不管有用与否。还有一个致命的缺点是,如果想在通知消息中添加一个参数,那么所有的观察者都需要修改了,这一点往往被忽视.

2.2 拉模式是观察者按照自己的意图定制信息,符合定制要求的信息才会弹出到观察者的视野,所以拉模式的出现是在信息海量化之后的更新的一种方式,其魅力在于信息搜索,知识选择和积累.

3. 总结

推模式的关键点在于其实效性,信息传递速度越快越能体现推的力量,而拉模式的关键在于其准确性,即所见即所需. 典型的综合应用: server push通知, client接受到后执行相关策略, 自行决定在合适的时候pull server取得数据.

4. 其他

在基于Message的系统中, 往往需要网络断开状态的支持. 如果仅采用Push方式, 在断开恢复后, 有可能会有大量信息涌向某client, 而这些往往都是状态的更新, 中间的所有信息都是多余的(大部分情况下, 我们仅需要最后的信息数据; 当然不排除特殊需求, 比如状态的检测, 这需要所有数据). 当采用push-pull方式, 在client接受到通知时, 可以采用很多决策, 比如暂时等待, 将大量短时间内同样的请求最后集中为一条发往server以pull数据.

Client得到push的数据后往往都是执行重量级的操作, 而在得到notification之后决定pull之前都是轻量级的操作.

5. 部分观点来源于这篇文章[1]. 

-----------------------------------------------------------------

Ref:

[1]: http://www.cnblogs.com/goodcandle/archive/2006/04/05/observerext.html

posted @ 2009-06-16 21:26  Tyrael  阅读(1438)  评论(0编辑  收藏  举报