2010年1月3日 星期日

Long polling

之前參加Tossug辦的plurk首席開發Amir Salihefendic的講座
恩...語言真的是科技傳遞的障礙...
大概聽了個四分之一懂...

會後協同Sleepnova大的某工研院朋友,跟amir問了關於long polling的問題
他說他剛剛的投影片有錯誤,因為他是copy & pasty所以多了幾條線

Long Polling中間的response要在放下面一點點,沒有跟event對齊,並且在request上面
Comet則沒有較下面的兩條request。
(懶的重畫,自己想像吧 XD)

上面的patch是錯的,而且Amir其實已經把圖改好了,現在的公布出來的投影片內容是正確的
可參考14頁的內容

後來跟宗董在他的部落格上討論

我google了一下...
http://en.wikipedia.org/wiki/Push_technology 有對long polling的介紹...隨手亂翻譯一下:
Long polling 是一種傳統查詢(poll)技術的變形 and 允許模擬從伺服器到用戶端的資訊推送(information push)。有了long polling,客戶端從伺服器要求資訊相似於一般的查詢。但是,如果伺服器沒有任何可用的資訊給客戶端, 伺服器會保留這個需求(request)並等待一些資訊可用 instead of 送出一個空的回應。一但資訊變成available (或是在適當的timeout後), 一個完整的回應被送至客戶端。客戶端將會一般的立即重新要求資訊從伺服器,所以伺服器將幾乎總是有一個可用的等待需求而可以用來交付資料來回應事件。
Long Polling 本身不是推送技術,但是可以被使用在真正的推送還不可能的環境。
http://blog.perplexedlabs.com/2009/05/04/php-jquery-ajax-javascript-long-polling/這邊有php實作long polling的example:
看起來是就用usleep()給他等沒錯 XD

關於Long Polling保留連線的所造成負擔的問題,這裡有篇文章有解釋,我還沒仔細看http://cometdaily.com/2007/11/16/more-on-long-polling/


我也開了firegub看plurk怎麼搞,waiting time都很短沒錯(< 1sec)
可是status bar顯示的"等待comet05.plurk.com"都持續顯示好幾秒...
而且firebug網路那頁顯示的時間點怪怪的
明明是剛剛才送出的request,完成後它的bar卻是顯示從好幾秒之前開
我想可能要開個Wireshark之類的看比較準。
我覺得我認知的應該沒錯,不過plurk實際實作上可能有其他不一樣的細節吧?

沒有留言: