2012年4月16日 星期一

自製 GWT 版 GAE Channel API

雖然之前寫〈用 Channel API 實作簡易聊天室〉,已經算是把 Channel API 順過一遍了,但問題是......
有了 GWT,誰還想去碰 JS 啊...... 囧>
於是 google 了一下,發現這兩個 project:gwt-gae-channelgwt-channel-api 有將 Channel API 包好給 GWT 用,不過各有優缺點,茲簡單分析如下:
  • gwt-gae-channel:說穿了就是很直白地作一個 JS wrapper,把 JS 有關的部份包起來,所以程式碼寫起來很... 嗯... 啊... 人各有喜好 XD。沒有打算處理「取得 token」、「送訊息給 server」是一大敗點(作全套啊老闆),理論上一個 channel 只能在 constructor 時給定一個 SocketListener 實在沒啥彈性。不過可以自動 load Channel API 的 script 還蠻不錯的。
  • gwt-channel-api:整個程式看起來 & 寫起來都 OO 許多。不過原始的寫法只有處理 onmessage(),其他 onopen()onclose()onerror() 都沒辦法處理;需要在 host page 加上 load Channel API 的 script 敘述,這讓我不太滿意(會忘記啊老闆)。不過最大的亮點是 server push 的資料可以自動轉換成 object,這實在非常 GWT 的作法啊..... (y)
這兩者還有一個共通的缺點:只能處理一個 channel,無法讓一個 GWT module 同時開多個 channel......


好的,於是就以 gwt-channel-api 為主要參考對象、搭配 gwt-gae-channel,重新製作成這玩意:[GF] GWT 版 GAE Channel API  \囧/

使用方式在連結裡頭都有,就不多說了,來講講到底做了哪些改進:
  • 自動 load Channel API 的 script
  • 可傳遞/接收自訂 object
  • 使用 event bus,可選擇掛載哪些 handler、也可對同一種 event 掛載多個 handler
  • 可以同時開啟多個 channel
  • 繁體中文版說明文件(是說,我也寫不出英文版)[毆飛]
  • (自以為)寫起來很 GWT
大概就是這樣了...... \囧/

順帶一提,關於授權的事情我非常困惑。自己寫的當然沒啥問題、 ChannelServiceServlet 是直接使用 gwt-channel-api 的 ChannelServer,所以授權申明完全保留,應該也沒啥問題。那把 A 的 method 卡進 B 的 class 中,那這樣到底要沿用那一邊的授權? 還是完全不管當成自己寫的...... [炸]

無論是授權問題 or 程式碼問題,如果有任何批評建議,還請各方大德不吝指教。

ps. source 在 jar 檔裡頭有。因為整個 GodDamn-Fuckwork 的 source code 還很亂,所以就先不 commit 上 Google Code...... XD

沒有留言:

張貼留言