l

2012年3月14日 星期三

Node.js能幹嘛?

March 13 22:32~23:47

螢幕快照 2012-03-13 下午10.41.36

 

這又是一篇「老漢再提當年勇」的貼文。想當年Teddy剛出社會的時候,Web與Java才剛剛開始流行沒多久。在那個年頭要開發網頁應用程式可不像現在有那麼多選擇,在伺服器端寫寫CGI算是基本款,在瀏覽器端則是使用Javascrip與Java Applet做點互動效果。原本Teddy是完全不會這些Web的玩意兒,當年為了開發一個叫做WWM(World Wide Meet)的小程式,逼著Teddy不得已只好把Javascript與Java Applet玩到滾瓜爛熟。先插一句題外話,Teddy當年覺得會Javascript好像不怎麼吃香,曾經有一度Teddy還希望Javascript絕種。沒想到十幾年過去了Javascrip不但不死還越混越好,地盤越玩越大,從client端玩到了server端。

言歸正傳,這個WWM是東海大學周教授所提出的一個想法,請參考上圖。當年的WWW(World Wide Web)提供了網民(netizen)之間所謂的「垂直關係(vertical relationship)」,也就是網民可以跟網站所設計的內容互動。但是正在瀏覽同一網頁的網民們彼此卻無法互動,也就是所謂的缺少「水平關係(horizontal relationship)」。如果一個網站可以幫網民們建立起水平關係,那麼很多新的商機便可應運而生。當年Teddy還跟周教授合寫了一篇WWM的論文(其實英文內容主要都是周教授寫的…XD),有興趣的鄉民可以來這裡下載

這樣的解釋對鄉民們可能還是太抽象了(Teddy非常了解鄉民們的大腦構造…XD),想民們就把WWM想成是一種「網頁上的聊天室」,與一般的聊天室不同,WWM會出現在網站的每個網頁中。想像一下,假設鄉民甲目前正在看Teddy所寫的這篇部落格文章,而遠在美國矽谷某位失眠的人士因為某種神祕的力量剛好也在看同一篇文章。正所謂十年修得同文讀(在同一時間,同一網站讀取相同的文章),這是多麼大的緣分啊。如果這個部落格系統有提供WWM的功能,那麼太平洋兩岸的這兩位鄉民便有機會可以針對Teddy這篇文章所寫的內容「及時」討論一番。說不定因此又促成了一樁 孽緣 姻緣,啟不快哉。

當年Teddy就是負責開發這個WWM系統的工程師,雖然一開始周教授有給Teddy一份他的學生所開發出來的版本,但是…總之Teddy又重寫了一次…不,應該說好幾次。整個系統包含一個用Java開發的後端的Server,前端是一支Java Applet以及一些Javascript程式。前端的Applet會建一個TCP connection連到後端的Server,並且告訴Server自己所在的網頁位址。Server會以此位址當作「聊天室房間號碼」,只要有相同位址的client連進來,就代表者些clients正在看相同的網頁,可以一起聊天。

就這樣,這個功能現在隨便找大三的學生來寫應該都可以在三天內寫完。當年Teddy寫了多久已經完全沒印象了,程式邏輯看起來不難,但是仔細想一想,一個網頁就是一個聊天室,那麼一個網站有多少網頁。要是真的有很多使用者連上這個網站,那麼後端的Server要如何處裡這麼大量的TCP連線請求呢?

***

讀到這邊鄉民們可能會有一個疑問,上面這一大堆有的沒的,跟今天的題目「Node.js能幹嘛?」有何關係?先解釋一下Node.js是什麼,簡單的說Node.js是一個server-side Javascript執行環境,骨子裡使用的是Google Chrome V8 Javascrip引擎,所以執行速度很快。關於執行速度這一點Teddy其實有很多疑問,Javascript就算再快,真的可以跑得的比Java還快?那麼跟C/C++相比又是如何。這些姑且先不管它,總之Node.js強調自己提供一種non-blocking,event-drivent的程式開發模式,適合用來處理data-intensive real-time applications。YouTube上面有一個Introduction to Node.js 的演講,由Node.js的發明人Ryan Dahl親自介紹,有興趣的鄉民們可以去聽看看。

Teddy這幾天利用一點點時間稍微看了一下Node.js,但是看到的應用都是一些小例子,於是Teddy就在想,Node.js這種「看起來很酷」的東西,實際上到底能夠拿來做什麼。想著想著就想到N年前用Java開發的WWM啦。也許應該擠一點時間出來用Node.js來開發一個WWM Server,應該會滿有趣的。

***

友藏內心獨白:那client端勒,好久沒寫applet與Javascript了。

2 則留言:

  1. Jwo?

    那 Teddy 大人應該秉持一貫 Java 原則,用 GWT 啊! [握拳]

    (才怪,某個年代 AAJC 還不是一堆人在弄 .net [淚目])

    回覆刪除
  2. To Monty Pan:

    你也知道AAJC,該不會是東海校友吧...Xd。

    回覆刪除