PubSubHubbub协议是一个简单、开放、服务器对服务器的,基于Web-hook的发布/订阅(pubsub)协议,是Atom和RSS的扩展。遵守PubSubHubbub协议的参与者(servers)能够(通过webhook callbacks)几乎实时地获取到自己感兴趣的主题(feed URL)更新信息。
协议概述内容如下:
(1)一个feed URL(一个"主题")通过<link rel="hub"…>标签在其Atom或者RSS的XML文件中声明其Hub server(枢纽服务器)。这个Hub(s)可以有feed的发布者运行,也可以由任何人都可以使用的群体Hub。(Atom和RSS都被支持)
(2)一个订阅者(对某个主题感兴趣的服务器),首先如正常一样的获取Atom URL。如果Atom文件声明了它的Hubs,那么订阅者就可以避免不完全的,重复的轮询(lame,repeated polling)URL,而是在feed的Hub注册和订阅更新。
(3)订阅者通过主题URL声明的Hub(s)上订阅这个主题。
(4)当发布者(Publisher)下一步更新这个主题URL,发布者的软件会ping其Hub(s),告知这里有一项更新了。
(5)Hub能够高效的获取已发布的feed,并且广播最新/更改的内容给所有注册的订阅者。
PubSubHubbub 只是一个协议而不是服务,这个协议是分散管理的(去中心化)且免费的。没有一家公司在其中进行控制。任何人都可以运行一个Hub,或者任何人都可以使用开放的hubs进行发布或者订阅内容。
目前,Google提供了一个开源的Hub参考实现(协议最复杂的部分),运行在Google的App Engine上,同时开放给所有人使用。(实例:Live,Demo Hub)
下面是对订阅流(Subscription flow)的详解图。
1、 订阅者请求发布者的Feed。Feed返回其Hub的链接。
2、 订阅者发送订阅请求到Hub。请求中包含Hub需要发送更新的终端URL。
3、 Hub发送给终端确认请求是否是真实的;订阅者回复确认给Hub。
4、 发布者通过post其Feed URLs给Hub通知Hub其有更新;Hub会重新获取Feed找到其中新的条目内容。
5、 如果发布者没有主动通知Hub,Hub会定期的抓取发布者的Feed以获得更新内容。
6、 当Hub接收到Feed X的更新,它会把更新post给所有订阅者的终端URL。
7、 如果Feed X有多个订阅者,Hub会把更新发送给所有人。这大大降低了发布者的负载。
8、 未来是分布式的:包含一些大Hubs,许多小Hubs,无数的发布者和订阅者。发布者、订阅者和Hub都可以扮演多种功能角色。
最后是一张完整的功能需求表,PuSH协议对三者功能的基本描述如下图所示。
本文参考的资料都是官网的英文资料,以翻译为主。详细资料和实现都可以参考这里:
http://code.google.com/p/pubsubhubbub/
转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/