實戰 FastCGI_1.克服 CGI 的瓶頸(2)
發表時間:2024-06-11 來源:明輝站整理相關軟件相關文章人氣:
[摘要]1.2 一些解決之道 現在已經有許多方案被提出來以解決 CGI 執行效率上的瓶頸,在『用 FastCGI 加速你的網站』一文中也有簡單的說明,這里僅就筆者在開發股市實時報價的網站應用程序時,所嘗試過的一些方法提出個人的經驗和意見。以筆者的案例而言,原本的 CGI 程序是以 C 語言寫的,并且用...
1.2 一些解決之道
現在已經有許多方案被提出來以解決 CGI 執行效率上的瓶頸,在『用 FastCGI 加速你的網站』一文中也有簡單的說明,這里僅就筆者在開發股市實時報價的網站應用程序時,所嘗試過的一些方法提出個人的經驗和意見。以筆者的案例而言,原本的 CGI 程序是以 C 語言寫的,并且用了其它的 C 函式庫所以下列的方法主要是以提供 C 語言開發環境的方案為主。
NSAPI 由于原先網站是在 Unix 系統上,網站服務器使用網景 Enterprise Server,所以最早想到是用 NSAPI 來改寫網站應用程序。在網景的網站上有非常詳細的 NSAPI 使用手冊,不幸的是沒有中文手冊。要用 NSAPI 改寫網站應用程序最麻煩的是你要把所有程序編譯成動態函式庫 (share library),以供 Enterprise Server 在 run-time 時期可以動態呼叫這些程序。由于利用 NSAPI 所寫的程序是直接從 Web Server 的執行空間內被呼叫,所以速度最快,但是程序必須遵循 Enterprise Server 的撰寫規則,而且一旦程序發生錯誤, Web Server 也會受影響。
ISAPI 相較于 NSAPI ,在 Microsoft NT IIS (Internet Information Server) 平臺就是 ISAPI 了。類似 NSAPI ,利用 ISAPI 撰寫網站應用程序,必須把應用程序編譯成動態函式庫,也就是 DLL 檔。它的執行速度也很快,但要遵循 ISAPI 的撰寫規則和數據結構,程序發生錯誤時也會影響 IIS Server 的正常運作。
綜觀以上兩種以 Web Server API 為主的方案 (其實 Apache 也有相對應的 Server API,只是用的人可能更少) ,它們的執行速度都很快,就產生動態網頁而言比 CGI 快上好幾倍。但是就程序開發者的角度2來看,它們有一些缺點:
1. NSAPI 及 ISAPI 與網站平臺相依性太高 (Platform dependency),也就是說使用了 NSAPI 或 ISAPI 后,應用程序就完全受限于所使用的網站服務器平臺,不能變換所使用的網站服務器。不像 CGI 完全不受網站平臺的限制,可以在任何網站服務器 (Netscape, Microsoft IIS, Apache, NCSA)上執行。另外像 ISAPI 更只能限制在 Windows NT 平臺上使用。
2. NSAPI 及 ISAPI 只提供 C 程序語言的界面,亦即開發者一定要使用 C 語言開發。不像 CGI 是與開發者所使用的程序語言完全無關,除了 C 之外,常用的還有 Perl,Tcl等。
3. Netscape Enterprise Server 和 Microsoft IIS 都是以多執行緒 (Multi-Threads) 的方式處理 NSAPI 及 ISAPI 的程序,所有執行緒共享同一塊變量空間,因此在變量數據的處理上要特別小心,以確保每一個執行緒內的變量資料的安全,不會互相影響。
4. NSAPI 和 ISAPI 應用程序都是直接在服務器的執行行程 (process) 內被呼叫,如果程序當掉了,整個網站服務器都會被影響。CGI 當掉服務器會響應 Internal Server Error 的訊息,服務器本身不受影響。
5. NSAPI 和 ISAPI 應用程序必須被服務器呼叫才會被執行,偵錯 (debug) 相當不容易。