對康爺PubSubHubbub教程的一些補充

2022-03-01 23:14:19 字數 2974 閱讀 2138

鄭昀@玩聚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"?>

<feedxmlns="" xmlns:media="" xmlns:idx="urn:atom-extension:indexing" idx:index="no" xmlns:gr="">">google reader

tag:google.com,2005:reader/user/15221435823542888940/state/com.google/broadcast

cpbs2qqhq5wc/public/atom/user%2f15221435823542888940%2fstate%2fcom.google%2fbroadcast" rel="self"/>zhengyun

2009-09-24t15:22:57z

<entrygr:crawl-timestamp-msec="1253805777401">tag:google.com,2005:reader/item/adfecf99f68d6292

【幸福課】心靈之旅:如果不知道真正想做的事情,你可以 | 幸福課_傳播有益的心理學

2009-09-24t15:22:57z

2009-09-24t15:22:57z

" type="text/html" rel="alternate"/>" rel="related" title="www.xingfuke.net"/>">現在沒有方向和答案的話,那麼先讀100本書、鍛鍊好身體,這兩件事永遠都是對的、永遠都是立馬應該去做的。

(author unknown)

tag:google.com,2005:reader/user/15221435823542888940/source/com.google/link

www.xingfuke.net

" type="text/html" rel="alternate"/>

anyway,subscriber要:

1:接到資料,最好非同步處理(解析、入庫等),要確保盡快返回,尤其是當你接收的是shared items feed xml 時,以防萬一資料位元組數太大。

2:雖然hub有狀態,但你自己也要保證有狀態,知道哪些items是新發布的,畢竟hub是否只推送最新分享的文章取決於google reader使用者的分享頻率

3:http://server/subscribe/keso ,這樣,當你收到資料時,不需要解析feed xml內容就知道這是哪乙個shared items的更新。

三、hub何時通知你有更新

並不是像通常想像的,你一在google reader裡點選了某篇文章的shared按鈕,hub就立刻推送更新到subscriber。未必

多數情況下,幾秒鐘就push新資料過來了。但有時,可能是hub的策略設定,是兩次shared點選才會觸發一次hub推送,推送的資料內容就是這個批次分享的那兩篇文章。

鄭昀@玩聚sr 20090924 北京報道

對康託展開的一些心得

康托展開 對於全排列中形成的乙個陣列,可以知道他是排列中的第幾種.具體公式為 x an n 1 an 1 n 2 ai i 1 a2 1 a1 0 其中,a為整數陣列,並且0 ai一下是一些 比如表示1,2,3,n的排列如 按從小到大排列一共6個。123 132 213 231 312 321 代表...

對synchronized this 的一些理解

一 當兩個併發執行緒訪問同乙個物件object中的這個synchronized this 同步 塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個 塊以後才能執行該 塊。二 然而,當乙個執行緒訪問object的乙個synchronized this 同步 塊時,另乙個...

對synchronized this 的一些理解

一 當兩個併發執行緒訪問同乙個物件object中的這個synchronized this 同步 塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個 塊以後才能執行該 塊。二 然而,當乙個執行緒訪問object的乙個synchronized this 同步 塊時,另乙個...