2011年3月28日

快快樂樂使用Java實作WebSocket (一)

雖然瀏覽器提供了「重新整理」的按鈕,點一下就可以更新網頁資料,但是對於愈來愈講求人性化設計的網頁設計,可不能要求使用者自己不斷去按重新整理。重新整理後的網頁,雖然更新了資料,但是對於瀏覽器或伺服器來講都很沒效率、也可能造成某些狀態的遺失。對於採用AJAX技術的網站,畫面的更新可以很動態且友善,而目前的趨勢則愈來愈講求資料更新的「即時( Realtime )」。

例如,打開一個「訂單列表」畫面,我會希望一筆新訂單建立時,會立即出現在目前的列表畫面,但不會影響我目前正在進行的操作。但這種設計對網頁架構的系統來說,是挺苛求的一件事。

大多數的網頁設計方式,採用Client Pull方式,是由瀏覽器端觸發新的HTTP連線,伺服器端才會回應新的資訊,因此必須不斷建立連線,例如每五秒重新查詢一次。若不考慮伺服器及頻寬負擔的情況,只要每秒都重新查詢,那樣資料的更新就會很即時,伺服器有什麼新資料都會立即呈現給使用者。但是對於線上有數百、數千甚至數萬人使用的網頁系統,肯定會造成相當大的負荷。

加長每次查詢的間隔時間,可以減輕伺服器的負擔,但是對使用者來說,就一點都不即時。而頻繁的查詢,即使擁有充足的頻寬及伺服器資源,仍是一件缺乏經濟效益的事,因為其中不少次的查詢,可能都是得到空的結果,因為根本沒有新的資料。

相反地,Server Push的模式,讓伺服器可以「主動」將新資料送出給瀏覽器。瀏覽器是一種Client端程式,並不會像Server程式可以建立一個TCP或UDP port等待連線。所以讓伺服器可以持續將新資料送至瀏覽器的作法,就是使瀏覽器打開一個網頁後,在背景仍保持著連線,伺服器可以透過這條連線,將新資料持續送出給瀏覽器。

只是,直到HTML5才有把「WebSocket API」列入標準,WebSockets協定讓瀏覽器可以和伺服器進行雙向溝通。儘管Google Chrome等現代瀏覽器已經實作WebSockets,但苦命的網頁開發者並無法享受新標準帶來的便利,因為要考慮到廣大的使用者的各種瀏覽器版本,強迫不支援新標準的瀏覽器必須升級,就等於將潛在的顧客阻擋在門外。

要做到「即時更新」的功能,還要顧及舊版瀏覽器的使用者,我們只能選擇多數當前使用者的瀏覽器都能通用的技術,還好許多Ajax Library已經費盡一番功夫(例如jQuery等),讓我們可以用比較輕鬆的方式,寫出跨瀏覽器的JavaScript程式,能夠在大多數人正在用的瀏覽器上運作。於是Comet模型的其中一種實作方式「Ajax with long polling」,成為目前一項實際有用的解決方案,是目前Facebook、Plurk等高流量社群網站實作動態更新的方式。

藉由Ajax的作法,JavaScript可以在背景透過XMLHttpRequest與伺服器建立連線,這其實還是一種「polling(輪詢)」的作法,但關鍵技巧在於每次polling查詢,若伺服器沒有新資料可以回傳,就會等待一段比較長的時間,直到伺服器上有新資料可以回傳,或是等待時間逾時為止。只要在背景維持一條long polling的查詢,就可以讓伺服器的新資料出現時,在很短的時間內就傳回給瀏覽器,而且不會很頻繁地建立、關閉連線,因為瀏覽器和伺服器之間每次建立HTTP連線進行request/response,都是相當耗費成本。而long polling盡可能地達到接近「即時」的更新效果,但成本卻相對低得許多。

這種概念不難理解,但實作起來仍會遇到技術上的問題。最大的問題在於long polling的查詢會維持比較長的時間,對瀏覽器來說這沒什麼問題,只是多一條連線佔用。但是對伺服器來說,假設一個人都是建立一條long polling的查詢連線,有多少人在線上,總共就會有多少條連線。相信設定過Apache等網頁伺服器的技術人員都會清楚,伺服器設定通常會有「連線數量上限」這一項目,預設數量通常不多,文件也不建議把它改得很高,因為伺服器要處理這些連線,必須建立新的process/thread,都是相當耗記憶體等系統資源。因此同一時間的連線數量如果過高,超過伺服器的負荷,可能會造成癱瘓、無法回應的後果。

待續... (本文將對Java平台的WebSocket實作方式陸續提供整理)

2011年3月15日

2011高階IT架構師的知識饗宴座談會

日前在Facebook收到一則活動邀請,名稱是「高階IT架構師的知識饗宴座談會」,在印象中每次跟微軟有關的活動,都是要繳不少報名費,但這一場居然,談論的議題也是我最近比較感興趣的幾個主題。

大師級顧問排排坐,暢談軟體架構師的各種有趣經驗。
R0010065

這場座談會並沒有談論微軟技術細節,而是從「高階架構師」的角度看待軟體開發這件事,但也並非抽象理論的高談闊論,而是相當務實地分享實務經驗,聽起來就是「make sense」。在場每位顧問都有相當多開發實戰經驗,對於像Cloud、SOA這些不容易實現的願景,也就實際開發上能夠得到的利益、難處,分享可謂一針見血的經驗及心得。

從這些顧問身上,我們可以看到一位充滿熱血的資訊人,怎麼一路堅持理想從程式設計師走到軟體架構師?怎麼歷經作者、講師及顧問這些不同的身分,在現實與理想之間找到飯碗?怎麼在不同的時期都保持自己不斷追求新知、學習新技術的熱誠?

如果你當初也是滿腔熱血踏進軟體開發這條路,但又被無趣的高級打字員暨除蟲專家工作消磨掉大半熱情,想要找回熱愛技術的初衷,也可以考慮利用這類活動幫自己充電、規劃新職涯,肯定會有不少收穫。但如果是寫過的程式加起來還沒超過一萬行,就想著要變身成軟體專案管理師,就比較不適合這類活動,可以考慮快去報名PMP訓練班,免得耽誤寶貴的升遷和加薪機會。

延伸閱讀

2011年3月7日

您還在用IE6嗎?終結IE6倒數計時開始...

The Internet Explorer 6 Countdown是微軟設立的網站,主旨是告訴全世界該向Internet Explorer 6 (IE6)說掰掰,讓它的使用率降到1%以下。
http://ie6countdown.com/
今年是2011年,而IE6是十年前的產品,但仍有為數不少的電腦使用者,仍然停留在這個遠古時代的瀏覽器版本。雖然說軟體並不一定要追求最新版,只要穩定、安全、用起來順手就好,但這十年間Web技術有不少演變,版本過舊的瀏覽器不僅造成畫面錯亂、功能失效的問題,也更容易遭到惡意入侵、隱私安全威脅。
為了能讓網站盡可能支援多種瀏覽器,給網頁開發者帶來不少困擾,雖然一個好的網站應該能夠支援多數使用者還在用的瀏覽器版本,但要讓十年前的瀏覽器也能正常使用,不僅要耗費更大量的開發成本,讓更多工程師因此過勞,還要犧牲一些對使用者有好處的新功能設計。
因此,為了能夠享受現代瀏覽器帶來的安全及便利,以下的方式,您也可以協助減少IE6使用率:
  1. 如果您擁有自己的網站,請利用以下這段代碼幫助使用者升級。
  2. 幫助朋友將IE6升級成新版的瀏覽器。
對於交情好的朋友,您除了可以告訴他趕快把IE6更新,還可以推薦他安裝更棒更強更快更輕更好更安全的FirefoxGoogle Chrome瀏覽器。

2011年3月4日

[實測] 壹電視網樂通機上盒 + 友旺AboCom WU5205 USB無線網路卡

從農曆過年前就申請網樂通,一直等到今天,終於宅配送來了這個傳說中的機上盒。日前請Facebook上的壹專員幫忙催促似乎是有些效果,但距離免費電影大放送的結束日03/31,也剩沒多久可以看啦。

目前上架的電影清單可參考這個網頁

第一次使用網樂通,必須打電話去開通(內附的那張紙有寫客服電話號碼),過程要核對一些個人資料、產品序號及MAC代碼,有點繁瑣大概要花個三、五分鐘。接著會自動更新軔體,等待期間要小心不能突然斷電。

我的房間沒有網路接孔,只能仰賴家中的WIFI無線網路訊號。網樂通機上盒後方有配置一個USB孔,把手邊一個閒置的USB網卡插上去,在網路設定的選單就多了一個無線網路,測試後發現網路連線一切正常,沒想到這個看起來很陽春簡單的機上盒,也能輕鬆地變成無線版。

這個USB網卡是 友旺 AboCom WU5205,是很便宜的迷你無線網卡,日前拿來掛數月eMule之後,變得時常秀逗,但接上網樂通,測試播放了幾部影片是沒有問題的。
在mobile01有好心網友整理了網樂通相容網卡清單,如果剛好有網樂通而手邊沒有網卡需要添購,可以參考一下哪些型號確定可以相容。

以下是用網樂通+USB無線網卡播放「全面啟動」這部電影,個人覺得那支白色遙控器比機上盒更有質感些。
lyhcode by lyhcode
歡迎轉載,請務必註明出處!