首页 > 教程 > [教程]如何使用PubSubHubbub协议

[教程]如何使用PubSubHubbub协议

2009年9月24日 康爷 发表评论 阅读评论

前一篇日志PubSubHubbub工作原理及使用入门大致介绍了PubSubHubbub的工作原理和流程,这次将结合实例,介绍如何使用PubSubHubbub协议进行开发,并给出实例代码。

 


1.订阅Feed

如果一个Feed支持PubSubHubbub协议,那么在feed中将会告诉你,托管这个feed的hub的地址。比如,在http://www.google.com/reader/shared/areyoulookon的feed中,有<link rel="hub" href="http://pubsubhubbub.appspot.com/"/>,这就表示,这个feed由pubsubhubbub.appspot.com这个hub进行托管,也就是说,你需要向pubsubhubbub.appspot.com请求获得这个feed的实时更新情况

下面详细讲讲如何订阅(还是以那个greader share的feed做例子):

1.发送订阅请求

pubsubhubbub.appspot.com是pubsubhubbub始作俑者,两位Google工程师之一的某人完成,由于他是Google App Engine团队的,所以利用GAE开发了一个hub,为大家也为Google提供了方便。订阅更新的地址是:

http://pubsubhubbub.appspot.com/subscribe

那么,要订阅上面那个feed,需要向这个地址Post哪些参数呢?主要是下面四个参数(以及应该填的值):

hub.mode = subscribe|unsubscribe (是订阅还是取消订阅)

hub.verify = sync

hub.callback = http://domain.tld/your/callback (callback就是说,你用来接收这个hub传来的信息的网址,这个很重要,就是你处理更新的应用的地址

hub.topic = http://www.google.com/reader/public/atom/user/16797483721654978846/state/com.google/broadcast(这个就是我们要订阅的feed源,取名为topic,大家要适应)

好了,下面不管使用何种程序语言,你只要向http://pubsubhubbub.appspot.com/subscribe 发送含有上面四个参数和值的Post请求,就完成了订阅Feed的70%的工作了。你也可以到http://pubsubhubbub.appspot.com/subscribe 去试玩一下,无需编程。

2.验证你的订阅

pubsubhubbub协议规定,并不是所有发往hub的订阅请求都能通过,当你订阅了一个topic后,hub服务器会给你的callback网址发来一个HTTP GET请求,获得正确的响应后,才能订阅成功。(这是为了防止你用错误的callback地址,让hub服务器进行DDoS攻击)。

当我们按照1里面的步骤,发送了订阅请求(HTTP POST)后,hub服务器会给callback网站发来一个HTTP GET请求,参数如下:

hub.mode = subscribe|unsubscribe
hub.topic = http://www.google.com/reader/public/atom/user/16797483721654978846/state/com.google/broadcast
hub.challenge = a-random-string (这个很重要,就是验证的字符串,你的callback网址需要记录它)

如果你的callback网址接到这个请求后,能返回输出hub.challenge的值的话,并且是一个成功的响应(status code是200),那么订阅就成功了!

 

2.处理更新内容

订阅成功以后,如果订阅源发生了更新,按照我们上次PubSubHubbub工作原理及使用入门介绍的,hub服务器将会获得通知,然后立刻发送HTTP POST请求到我们订阅的callback网址,请求的内容是xml格式的(基本类似于标准的atom格式),里面包含了更新的内容,下面就是你使用各种方式,处理这段xml字符串,为你所用了。

 

3.有用的链接和代码

那篇让我看懂如何使用PubSubHubbub的文章:Getting Started with PubSubHubbub

订阅Feed的WEB接口:http://pubsubhubbub.appspot.com/subscribe

PubSubHubbub主页:http://pubsubhubbub.googlecode.com/

如何更好地开发PubSubHubub:http://code.google.com/p/pubsubhubbub/wiki/BestPractices

Google App Engine的示例代码:http://code.google.com/p/pubsubhubbub/source/browse/#svn/trunk/subscriber重要!这个基本是1/3的reader2twitter代码了

分类: 教程 标签: , ,
  1. 2009年9月24日18:32 | #1

    1:
    当hub服务器给callback地址发送确认请求时,还会附带过来一个参数:
    hub.lease_seconds=3600
    表明一小时后这个订阅就会过期(subscription expiry)。

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

    3:
    如果subscriber并未设定hub.lease_seconds,说明是永久订阅,那么刷新策略就要参考:
    http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.2.html#autorefresh
    的说明:
    订阅过期前,hub会主动给subscriber重新发一个verification request,要求subscriber再次确认是否订阅。

  2. 2009年9月24日18:35 | #2

    当然,不去理会Automatic Subscription Refreshing也可以,毕竟hub届时会自己发起是否继续订阅的请求,subscriber还是按照惯例回复challenge code以及200 OK即可。

  3. 2009年9月30日18:22 | #3

    请教一下,Pubsubhubbub可以用来做服务器到用户客户端浏览器的推送吗?如果可以,Callback地址怎么填呢?建站初学者,不太懂,呵呵,谢谢。

  4. 康爷
    2009年9月30日18:26 | #4

    @cncdcc 需要客户访问你的网站,然后你可以向他实时推送。。。你的后台接受来自hub的提醒,然后你的服务器端处理后推送给用户,比如friendfeed

  5. 2009年9月30日21:58 | #5

    @康爷
    也就是说我的后台通过Pubsubhubbub协议取得来自hub的内容更新后,要推送内容给浏览我网站的用户,还需要另外的技术,因为Pubsubhubbub协议管的是服务器之间内容获取的推送,而不管服务器到浏览器的推送,是吧。谢谢啦。

  1. 2009年12月14日18:02 | #1
  2. 2009年12月15日00:06 | #2