首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

了解 PubSubHubbub(2)

了解 PubSubHubbub(2)

“给我看代码”既然您对协议有了基本的了解,我将向您展示如何使用 Google 的 PuSH 参考实现,它是开放源码的(Apache 许可证)。我将重点介绍订阅实现,它允许您建立充当订户的系统。
从项目的 Subversion 存储库中检查代码(参阅 )并快速浏览。“订户” 目录是一个完整的 App Engine 应用程序,它没有包含在我所描述的订阅代理部分,您必须自己补充这方面的知识。您可以从已包含的一些 PHF 代码开始了解 “订阅代理” 目录。
订户不能位于防火墙后面,除非您想额外花费一些精力来配置您的路由器,从而使这一切行得通。您可以使用 Google App Engine SDK(参阅 )部署您自己的 App Engine 帐户上的订户, 或者您可以使用 SDK 在任何您选择的 Linux 主机上托管代码的测试版本。IBM 确实提供了 App Engine 支持工具(参阅 ),以便将应用程序移植到 IBM 中间件,但它们需要一个 Java™ 实现,而 PubSubHubbub 参考实现是用 Python 编写的。我将向您演示使用 SDK 在 Linux® 主机上托管应用程序的情形。在这种情况下,您不会拥有 Google 数据存储后端的所有可扩展性,但不管怎样,这对于单纯的订户而言是没有必要的。显示了这个过程。
清单 1. 设置 PubSubHubbub
1
2
3
4
5
6
7
8
9
10
#Set up the App engine SDK
mkdir -p $HOME/.local/gae
cd $HOME/.local/gae
#Use wget or curl -O
wget
unzip google_appengine_1.6.2.zip

#Set up the PubSubHubbub app
svn checkout  pubsubhubbub-read-only
google_appengine/dev_appserver.py  --address=$ADDR pubsubhubbub-read-only/subscriber/




最后一行代码在端口 8080 上启动了服务器。确保已将 ADDR 设置为主机名或者环境中的服务器的 IP 地址。如果您运行的是一个大于 2.5 的 Python 版本,那么您可能会看到一个警告,但您不必担心这种情况。
我上面曾提到过,您必须提供自己的订户代理。简单的 HTTP 的妙处在于,它只需使用一条 cURL 命令就可以充当订户代理并订阅您的服务器来获得提要。参见  中的命令。
清单 2. 使用 cURL 进行订阅
1
2
3
4
curl -v  \
-d hub.callback=http://$ADDR:8080/subscriber\&\
hub.topic=http://stackoverflow.com/feeds/tag/python\&\
hub.verify=sync\&hub.mode=subscribe\&hub.verify_token=\&hub.secret=




中的 cURL 命令会联系 Google 的 hub,并订阅您的服务器,以获得 Stack Overflow 的 Web 提要中的某个主题。Stack Overflow 是一个社区站点,开发人员可以在此提出问题并讨论问题。我恰好知道 Stack Overflow 使用了 Google 的 hub,所以我不会为发现阶段感到烦恼,我只需为 Python 主题选择提要即可,这个主题相当活跃。如果一切进展顺利的话,您会从 cURL 中得到一个 HTTP 204 响应,此外,当 hub 与订户联系时,您还会在正运行的订户的控制台上看到一些调试信息。
现在,如果您等待一会 Python Stack Overflow 提要的更新,您将会发现已经使用内容更新了的订户。您可以再次使用 cURL 命令从 hub 看见一个简单的更新结构,例如以下命令:curl http://addr:8080/items。
在这里,您可以使用您的订户服务器替换 addr,也就是说,该值与 ADDR 环境变量相同。
大约一个小时后,在我的案例中我发现了一个推向订户的条目,此条目表现您在 中所见的一个结构。
清单 3. 已推出的条目
1
2
3
4
[{"content": "...",
"source": "http://stackoverflow.com/questions/9155264/xyz-question",
"title": "XYZ Question",
"time": "2012-01-25 05:11:22.849931"}]




该条目的 HTML 表示形式出现在省略号所在的位置上。此结构使用 Python 编写很容易,或者可以将它转换为 JSON。就是这样,您就可以进行发布/订阅。
结束语首先,PubSubHubbub 并不是您认为的最简单的协议,但无需花费太长时间您就能掌握它,认识到它有多强大,以及它对开放源码开发人员在 Web 上交流看法和代码有多重要。其他用户(包括商业机构)已经为 Google 的开放源码参考实现建立了分支,以形成其他 PuSH 实现的基础。目前,已经有适用于大量语言和平台的 hub 和订户实现,而且如果您不想自己运行代码,可以使用 Web 服务。不知不觉中,您就可以了解发布/订阅,既得乐趣,又得利益。
返回列表