对康爷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推送,推送的数据内容就是这个批次分享的那两篇文章。

 

with arms wide open

郑昀@玩聚SR 20090924 北京报道

目录
相关文章
|
Android开发 数据安全/隐私保护 容器
Android10.0 SystemUI—锁屏加载分析
Android10.0 SystemUI—锁屏加载分析
1650 0
Android10.0 SystemUI—锁屏加载分析
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB Supabase最佳实践-Web应用
PolarDB Supabase 是基于 PolarDB PostgreSQL 版的全托管服务,集成 Realtime 实时数据库、RESTful API、身份认证、文件存储等功能,提供高性能、灵活扩展的后端解决方案。用户可快速构建 Web 应用、SaaS 平台及 AI 集成应用,简化运维操作,提升开发效率。
|
人工智能 数据可视化 安全
瀑布模型是什么?在软件开发中有哪些主要阶段和步骤?
瀑布模型是一种经典的软件开发方法,将开发过程划分为需求分析、设计、编码、测试和维护等顺序阶段,强调阶段性和文档化。适用于需求明确、稳定且对安全性和可靠性要求高的项目。尽管存在局限性,但在特定场景下仍具重要价值。未来,瀑布模型可能与其他开发模型结合,更加灵活高效。
2367 3
瀑布模型是什么?在软件开发中有哪些主要阶段和步骤?
|
11月前
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
3079 2
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
603 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
18482 0
|
安全 Linux 数据安全/隐私保护
Linux文件访问权限检查与修改:基于access函数的实现
在Linux系统中,文件访问权限是非常重要的概念,它决定了用户对文件的读、写和执行权限。为了确保文件安全和数据保护,我们经常需要检查和修改文件的访问权限。本文将详细介绍Linux下基于`access`函数的文件访问权限检查和修改方法,并提供代码示例,帮助读者深入了解文件权限管理。
944 0
|
JavaScript 开发工具 C++
Qt 配置GitHub Copilot
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
文字识别 算法 计算机视觉
MATLAB实现OCR自动阅卷,识别答题卡进行成绩统计
利用MATLAB进行答题卡识别编程设计,最主要的是实现了将答题卡中被填涂的答案提取出来,然后与标准的答案进行比对。通过相关的算法,算出考生填涂正确的题数,并统计计算后的得分。
|
5天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾