博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对康爷PubSubHubbub教程的一些补充
阅读量:7168 次
发布时间:2019-06-29

本文共 2984 字,大约阅读时间需要 9 分钟。

@  20090924

康爷释出两篇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=" xmlns:media="xmlns:idx="urn:atom-extension:indexing" idx:index="no" xmlns:gr="><generator uri=">Google Reader</generator><id>tag:google.com,2005:reader/user/15221435823542888940/state/com.google/broadcast</id><link href=" rel="hub"/><title>zhengyun's shared items in Google Reader</title><gr:continuation>CPbs2qqhq5wC</gr:continuation><link href=" 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=" type="text/html" rel="alternate"/><link href=" rel="related" title="www.xingfuke.net"/><content type="html" xml:base=">现在没有方向和答案的话,那么先读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=" 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推送,推送的数据内容就是这个批次分享的那两篇文章。

 

@ 20090924 北京报道

转载地址:http://spxwm.baihongyu.com/

你可能感兴趣的文章
批量生成httpd-2.2十个虚拟主机配置
查看>>
红杉、IDG、北极光、顺为等投资大咖怎么看智能硬件
查看>>
Centos 7 破解root密码
查看>>
如何使用Visual Studio调试C#程序
查看>>
简单易操作的去水印工具有什么
查看>>
我的友情链接
查看>>
mysqldump: Couldn’t execute 错误
查看>>
给新手的Oracle学习路线
查看>>
超级全的H3C交换机配置命令
查看>>
Supesite 6.0 $_SGLOBAL[supe_username_show] 调用显示GUEST
查看>>
使用Powershell远程管理Windows Server(WinRM)
查看>>
学习日志---递归、非递归,迷宫问题
查看>>
c# 线程状态及转换
查看>>
windows批处理命令FOR的巧用
查看>>
Android Task 任务栈
查看>>
python实用程序-HTTP服务调用系统命令(带白名单)
查看>>
H3C S5500-28F-EI 清除配置
查看>>
load average
查看>>
浏览器标签栏logo添加
查看>>
setjmp()/longjmp()的使用方法
查看>>