2010年12月14日 星期二

GAE SDK 1.4.0 - Channel API

Google Appengine最近release1.4.0的SDK,其中最令值得注意的就屬channel API
Java版本的說明如下:
http://code.google.com/intl/zh-TW/appengine/docs/java/channel/overview.html


Channel API實做server push的概念(如HTTP long-lived connection、Comet、Long polling等) ,
使用HTTP長連接來實做http long-lived connection(亦稱長連接)。但Channel API須由用戶(或者說瀏覽器)發出的POST來驅動而不能由Server端自動傳送資料。

此外Channel API採用了新一代瀏覽器使用的Web Socket取代舊式瀏覽器所使用的long polling來進行資料傳輸。


Javascript Client:這個實際上就是你的瀏覽器,需要做這些事:
用channel的唯一token來連接channel,與sever建立長連接。
監聽channel的數據並更新給用戶。
發送數據給sever。

下面為一些基本名詞介紹L:

Server:就是GAE Server,負責:
1.為每個Javascript client創建唯一的channel。
2.建立與發送唯一token給client。
3.接收client發送的POST資料。
4.通過channel來給client傳送資料。

Client ID:用於唯一標識一個Javascript Client。 注意它必須是ASCII (最多64個bit)。

Tokens:用於讓client連接channel。 它包含Client ID和過期時間。

Channel:Server與client之間建立的通道。 這個通道在過期前會一直維持open,只能由server單方面地向client 傳送資料,client向server傳送資料是使用POST方法。

Message:Server與client之間發送的資料,message限制為32kb。

Socket:Javascript Client使用token來建立與server間的socket,用於接收channel發送過來的訊=息。

下圖是Javascript Client與Server建立Channel的示意圖。




1.Client先發送請求,告訴Server要建立Channel。
2Server接收到請求後,根據Client ID來創建一個Channel(Server可以用登錄的用戶名或產生的序號),然後把這個Channel的token回傳給Client。
3.Client接收到token,用這個token來建立Socket,連接到Channel。



上圖是Javascript Client與Server之間傳遞訊息的示意圖。
1.Client B向Server發送POST請求。
2.Server接收到請求後,解析這個request,並且將訊息轉發給指定的Channel(也可依需求轉發給所有Channel)
3.Client A從Socket接收到Channel發來的消息,使用onmessage來回應此訊息。

沒有留言: