現在已經有不少以Javascript作為伺服器端程式語言的伺服器出現,例如...IIS就可以使用Jscript/Jscript.NET來做ASP/ASPX的開發。之前介紹的V8 Javascript引擎的應用,也有介紹過一個以V8 Javascript引擎為核心的伺服器,接下來要稍微介紹兩個使用其他Javascript引擎的伺服器。
Aptana Jaxer
http://www.jaxer.org/
Aptana早先是做IDE的大廠,他製作的Aptana Studio應該不少人有聽過或用過。他現在也推出一個以SpiderMonkey為核心的伺服器,叫做Jaxer。接下來就下載Jaxer來玩玩看。
先把他解開到一個目錄裡面,他的目錄裡面有一個StartServers.bat檔案,可以用來啟動、停止aptana jaxer。仔細一瞧,原來實際的伺服器是Apache httpd 2.2,在httpd.conf最後可以看到他include ../jaxer/confs/*-win*.conf,然後在jaxer-win-httpd.conf裡面可以找到,他載入了一個mod_jaxer.so。
要開啟Aptana Jaxer,使用StartServers.bat就可以,加上start參數可以開啟伺服器,加上stop參數可以關閉伺服器。他預設使用的port是8081。
啟動後,只要在瀏覽器打http://localhost:8081/aptana就可以進入他預設的頁面。
回頭看一下目錄,可以找到js3250.dll,這就是SpiderMonkey編譯出來的dll。
再來看一下他的Javascript是怎麼跑的。用編輯器打開他的一個sample應用程式叫做wikilite的index.html檔案,可以看到像這樣的畫面:
但是透過瀏覽器來瀏覽伺服器上index.html時,內容變得有點不一樣:
很明顯伺服器剖析過檔案後,額外加了一些javascript。這是怎麼來的呢?從編輯器中往下找:
會發現有一些javascript tag會標示著runat="server",有些標示為runat="client",有些則標示為runat="both":
而runat="server"的程式中,可以看到資料存檔的方法。回到頁面上,可以嘗試編輯,然後編輯完的資料就可以存檔。
玩完了,同樣透過StartServers關閉伺服器:
helma
http://helma.org/
helma是另一個可以跑伺服器端Javascript的伺服器,他使用的是Rhino引擎,可想而知他是基於Java的技術。另外,在lib目錄裡面除了rhino.jar之外,還可以看到jetty.jar,所以我想他應該是內嵌jetty當作servlet容器。
安裝很簡單,只要把...檔案解壓縮就可以了,啟動也很簡單,只要執行目錄裡面的start.bat就可以啟動伺服器,不想跑了的時候,按下ctrl+C就可以停止執行。
他預設的port是8080,所以在瀏覽器輸入http://localhost:8080就可以打開他的預設網頁:
接下來想用jvisualvm看一下他的資訊,但是jmx的功能沒開,看不到什麼東西:
所以先去修改一下start.bat,加入一些JAVA_OPTIONS:
然後透過localhost:8086就可以得到比較詳細的VM資訊(換成用jconsole來看),例如有哪些執行緒在跑,這些執行緒類別是什麼:
還有jvm內的mbean相關訊息,不過看起來jetty或helma都沒有使用mbean來做系統的管理跟配置:
helma的javascript組織方式跟Jaxer有很大差距。透過apps.properties,先設定好一些基礎的對應,例如靜態檔案、程式的repository、mount point等。request url會剖析成action,然後透過一定的目錄規則找到處理的程式。更動態的結構是HopObjects,他是Helma擴充的Javascript物件,每個應用程式的root物件就是一個HopObject,他可以加入子HopObject,這些HopObject的樹狀結構就可以跟網站url的action結構對應。另外,Helma也把UI跟程式邏輯,用一些叫做Skin的檔案組織起來,類似template的做法,語法則類似jsp。詳細的說明,還是參考Helma的線上文件比較清楚:http://helma.serverjs.org/intro