对康爷PubSubHubbub教程的一些补充

郑昀@玩聚SR  20090924

康爷释出两篇pubsubhubbub入门开发教程《PubSubHubbub工作原理及使用入门》和《[教程]如何使用PubSubHubbub协议》,这里补充几点:

一、关于订阅过期和自动订阅刷新:

我们简称第一个请求“Subscriber Sends Subscription Request”(Subscriber-->Hub)为Subscription Request,称第二个请求“Hub Verifies Intent of the Subscriber”(Hub-->Subscriber)为Verification。

还存在一个保持心跳的策略,即Automatic Subscription Refresh。这样,当你的 subscriber 掉线或者宕机一段时间后,hub就不用再 push 数据给你了。

1: 
当发起Verification请求时,hub还会附带发过来一个参数: 
hub.lease_seconds=3600 
表明一小时后这个订阅就会过期(subscription expiry)。

2: 
hub.lease_seconds这个值可以是第一次请求订阅时subscriber告诉hub的,也可以是hub自己决定的。

3: 
如果Subscription Request请求中并未设定hub.lease_seconds,说明是打算永久订阅,那么hub保持心跳的策略是: 
订阅过期前,hub会主动给subscriber重新发一个确认请求,要求subscriber再次确认是否订阅。 在这个确认请求中,所有参数与Verification请求的一样,只是challenge code是新的。

所以,subscriber不需要专门处理Automatic Subscription Refreshing问题,因为第一是hub主动发起是否继续订阅的请求,第二subscriber还是按照惯例回复challenge code以及200 OK即可延续订阅。

 

二、关于处理更新内容:

对于订阅了Google Reader Shared Items的Subscriber,当内容更新时,hub由于是“无状态”的,所以第一次订阅时hub会发送过来这个Shared Items Feed的所有数据,通常是8条数据。

之后通常它只会把最新Shared的那篇文章发送过来,这就说明它还是有状态的。

Hub Server保存状态也是有一定的时间限制的 ,假如某一个用户长时间没有分享过文章,比如睡觉去了,那么第二天他再次分享文章时,Hub会把所有数据(8条)都推送过来。这说明在一段时间内,比如一小时内,Hub缓存了推送给Subscriber的数据状态,过期就清了 。Hub 不再记得曾经给你发送过哪些数据。

举例,某一次hub发送过来的Request.content为:

<?xml version="1.0" encoding="utf-8"?> 
    <feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"xmlns:idx="urn:atom-extension:indexing" idx:index="no" xmlns:gr="http://www.google.com/schemas/reader/atom/"><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/15221435823542888940/state/com.google/broadcast</id><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><title>zhengyun's shared items in Google Reader</title><gr:continuation>CPbs2qqhq5wC</gr:continuation><link href="http://www.google.com/reader/public/atom/user%2F15221435823542888940%2Fstate%2Fcom.google%2Fbroadcast" rel="self"/><author><name>zhengyun</name></author><updated>2009-09-24T15:22:57Z</updated> 
    <entry gr:crawl-timestamp-msec="1253805777401"><id gr:original-id="">tag:google.com,2005:reader/item/adfecf99f68d6292</id><title type="html">【幸福课】心灵之旅:如果不知道真正想做的事情,你可以 | 幸福课_传播有益的心理学</title><published>2009-09-24T15:22:57Z</published><updated>2009-09-24T15:22:57Z</updated><link href="http://www.xingfuke.net/psyblog/xingfuke1861.html" type="text/html" rel="alternate"/><link href="http://www.xingfuke.net/" rel="related" title="www.xingfuke.net"/><content type="html" xml:base="http://www.xingfuke.net/psyblog/xingfuke1861.html">现在没有方向和答案的话,那么先读100本书、锻炼好身体,这两件事永远都是对的、永远都是立马应该去做的。</content><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="user/15221435823542888940/source/com.google/link"><id>tag:google.com,2005:reader/user/15221435823542888940/source/com.google/link</id><title type="html">www.xingfuke.net</title><link href="http://www.xingfuke.net/" type="text/html" rel="alternate"/></source></entry
    </feed>

anyway,subscriber要:

1:

接到数据,最好异步处理(解析、入库等),要确保尽快返回,尤其是当你接收的是Shared Items Feed XML 时,以防万一数据字节数太大。

2:

虽然Hub有状态,但你自己也要保证有状态,知道哪些Items是新发布的,毕竟Hub是否只推送最新分享的文章取决于Google Reader用户的分享频率

3:

当你要接收成百上千Feed的更新时,可以针对每一个Feed设定不一样的callback地址,比如:

对于 keso 的 Shared Items,指定callback地址是:

http://Server/subscribe/keso ,这样,当你收到数据时,不需要解析Feed XML内容就知道这是哪一个Shared Items的更新。

 

三、hub何时通知你有更新

并不是像通常想像的,你一在Google Reader里点击了某篇文章的Shared按钮,hub就立刻推送更新到subscriber。未必 。

多数情况下,几秒钟就Push新数据过来了。但有时,可能是hub的策略设定,是两次shared点击才会触发一次hub推送,推送的数据内容就是这个批次分享的那两篇文章。

 

郑昀@玩聚SR 20090924 北京报道

时间: 2024-11-03 21:48:06

对康爷PubSubHubbub教程的一些补充的相关文章

CSS应用基础教程(3) 应用补充

css|基础教程 挑 选 者 特 性 的 应 用 在讲挑选者的特性之前,要提一下的是CSS继承的特性.所谓的继承的特性是指被包在内部的标签将拥有外部标签的样式性质.继承的特性最典型的应用通常发挥在预设整份网页的样式,而要指定为其它样式的部份再依要设定在个别元素里即可.这项特性可以提供网页设计者更理想的发挥空间. 接下来就要讲挑选者特性的应用!其实这部份应该算是声明的一种方式,但是在您看过第二章的基本的声明与应用後,到这边再讲挑选者您会比较有概念点.在CSS应用或设计的时候,有几种依据元素的关系或

CSS应用基础教程:应用补充

在讲挑选者的特性之前,要提一下的是CSS继承的特性.所谓的继承的特性是指被包在内部的标签将拥有外部标签的样式性质.继承的特性最典型的应用通常发挥在预设整份网页的样式,而要指定为其它样式的部份再依要设定在个别元素里即可.这项特性可以提供网页设计者更理想的发挥空间. 接下来就要讲挑选者特性的应用!其实这部份应该算是声明的一种方式,但是在您看过第二章的基本的声明与应用後,到这边再讲挑选者您会比较有概念点.在CSS应用或设计的时候,有几种依据元素的关系或性质来设定显示特定性质的方法,就是挑选者特性的应用

SR采用PubSubHubbub协议实时接收GReaderSharedItems更新

郑昀 @玩聚SR 200909 早前写的注意事项.现放出来,也许对 PubSubHubbub 爱好者有帮助. 一.启用 PubSubHubbub 协议更新玩聚SR数据的好处: 快. 几乎是一个Google Reader用户分享一篇文章之后的几秒钟时间,我们就可以把数据入库. 而依靠轮询每一个用户的 Google Reader Shared Items Feed,可能需要十几乃至几十分钟才能让一个更新入库.而且随着监听的用户数越来越多,轮询会越来越慢,而且也会因为某用户分享的某一篇文章有敏感词,导

Google App Engine教程计划的目录

今天思考了一下怎么安排整个"跟康爷学GAE"一系列教程的安排,当然期间也有可能改变,希望大家多多提出自己的看法,我会适当地进行改变.然后想说的是,我写这个系列只是想帮大家进入GAE开发的大门里来,我自己使用了GAE一段时间,也遇到了很多问题,希望随着GAE的不断完善,和大家一起进步. 一.G App Engineoogle的介绍二.GAE开发的一些准备工作    注册App Engine帐号     安装Python,App Engine SDK和编程软件     Python的基本语

Python快速教程

原文:Python快速教程 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库,拓展库,乱花渐欲迷人眼.一直希望写一个快速的.容易上手的Python教程.目标是做到言语简洁,循序渐进,让没有背景的读者也可以从基础开始学习.我在每一篇中专注于一个小的概念,希望在闲暇时可以很快读完. 小提醒 教程将专注于Python基础,语法基

Python补充02 Python小技巧

原文:Python补充02 Python小技巧 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程中经常使用的.之前很零碎的记在笔记本中,现在整理出来,和大家分享,也作为Python快速教程的一个补充.   import模块 在Python经常使用import声明,以使用其他模块(也就是其它.py文件)中定义的对象. 1) 使用__name__

不外传的seo计划教程方案

不外传的seo计划教程方案 网站在上线之前,我们就应该要对网站进行一个合理的规划,并且制定出一份完美的SEO计划出来,而且要按照这份SEO计划一步一步地实施下去,从而,使网站可以持续稳定地发展下去,这个就是我们制定SEO教程计划的重要作用了,因为,制定一份完美的SEO计划,不仅可以让你的网站有一个很明确的发展方向,而且,还可以提高你网站的关键词排名情况了,何乐而不为呢?那么,我们应该要如何制定一套无懈可击的SEO计划方案呢?接下来,seo教程就给大家仔细讲解一下吧! 一.分析SEO关键词 网站建

C++基础入门教程(四):枚举和指针_C 语言

我已经把<C++ Primer>一书准备好了,如果这本<C++ Primer Plus>继续这么瞎闹的话,我就换主角~! 没错,这书连if while都还没介绍呢,就开始把指针搬出来了,虽然只是简单介绍.. 这目录编排我也是醒了. 那么,按照书上的进度,今天来初步说说指针. 但,今天周五,你懂的,就随便水一下,因为我怕到周一又忘了. 1.枚举 那么,枚举是什么呢?(小若:等等~!说好的指针呢?) 大部分高级语言里应该都有枚举了,所以也没什么好介绍的. 使用是这样的: 复制代码 代码

Illustrator设计陶瓷酒杯绘制教程

给各位Illustrator软件的使用者们来详细的解析分享一下设计陶瓷酒杯绘制的教程. 教程分享:   补充: 在放样过程或完成后,如果放样出来的物体形状不满意,仍然可以对最初的截面线条进行编辑;如果想将自己的画作为贴图贴在物体表面,可以先将它加入库中,再在贴图时选择;这种旋转放样只适合一些简单的中心对称物体. 好了,以上的信息就是小编给各位Illustrator的这一款软件的使用者们带来的详细的设计陶瓷酒杯绘制的教程解析分享的全部内容了,各位使用者们看到这里的使用者们,小编相信各位现在是很清楚