明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

實(shí)戰(zhàn) FastCGI_1.克服 CGI 的瓶頸(2)

[摘要]1.2 一些解決之道   現(xiàn)在已經(jīng)有許多方案被提出來以解決 CGI 執(zhí)行效率上的瓶頸,在『用 FastCGI 加速你的網(wǎng)站』一文中也有簡單的說明,這里僅就筆者在開發(fā)股市實(shí)時報價的網(wǎng)站應(yīng)用程序時,所嘗試過的一些方法提出個人的經(jīng)驗(yàn)和意見。以筆者的案例而言,原本的 CGI 程序是以 C 語言寫的,并且用...
1.2 一些解決之道

  現(xiàn)在已經(jīng)有許多方案被提出來以解決 CGI 執(zhí)行效率上的瓶頸,在『用 FastCGI 加速你的網(wǎng)站』一文中也有簡單的說明,這里僅就筆者在開發(fā)股市實(shí)時報價的網(wǎng)站應(yīng)用程序時,所嘗試過的一些方法提出個人的經(jīng)驗(yàn)和意見。以筆者的案例而言,原本的 CGI 程序是以 C 語言寫的,并且用了其它的 C 函式庫所以下列的方法主要是以提供 C 語言開發(fā)環(huán)境的方案為主。

NSAPI

  由于原先網(wǎng)站是在 Unix 系統(tǒng)上,網(wǎng)站服務(wù)器使用網(wǎng)景 Enterprise Server,所以最早想到是用 NSAPI 來改寫網(wǎng)站應(yīng)用程序。在網(wǎng)景的網(wǎng)站上有非常詳細(xì)的 NSAPI 使用手冊,不幸的是沒有中文手冊。要用 NSAPI 改寫網(wǎng)站應(yīng)用程序最麻煩的是你要把所有程序編譯成動態(tài)函式庫 (share library),以供 Enterprise Server 在 run-time 時期可以動態(tài)呼叫這些程序。由于利用 NSAPI 所寫的程序是直接從 Web Server 的執(zhí)行空間內(nèi)被呼叫,所以速度最快,但是程序必須遵循 Enterprise Server 的撰寫規(guī)則,而且一旦程序發(fā)生錯誤, Web Server 也會受影響。

ISAPI
  相較于 NSAPI ,在 Microsoft NT IIS (Internet Information Server) 平臺就是 ISAPI 了。類似 NSAPI ,利用 ISAPI 撰寫網(wǎng)站應(yīng)用程序,必須把應(yīng)用程序編譯成動態(tài)函式庫,也就是 DLL 檔。它的執(zhí)行速度也很快,但要遵循 ISAPI 的撰寫規(guī)則和數(shù)據(jù)結(jié)構(gòu),程序發(fā)生錯誤時也會影響 IIS Server 的正常運(yùn)作。
  綜觀以上兩種以 Web Server API 為主的方案 (其實(shí) Apache 也有相對應(yīng)的 Server API,只是用的人可能更少) ,它們的執(zhí)行速度都很快,就產(chǎn)生動態(tài)網(wǎng)頁而言比 CGI 快上好幾倍。但是就程序開發(fā)者的角度2來看,它們有一些缺點(diǎn):

  1. NSAPI 及 ISAPI 與網(wǎng)站平臺相依性太高 (Platform dependency),也就是說使用了 NSAPI 或 ISAPI 后,應(yīng)用程序就完全受限于所使用的網(wǎng)站服務(wù)器平臺,不能變換所使用的網(wǎng)站服務(wù)器。不像 CGI 完全不受網(wǎng)站平臺的限制,可以在任何網(wǎng)站服務(wù)器 (Netscape, Microsoft IIS, Apache, NCSA)上執(zhí)行。另外像 ISAPI 更只能限制在 Windows NT 平臺上使用。

  2. NSAPI 及 ISAPI 只提供 C 程序語言的界面,亦即開發(fā)者一定要使用 C 語言開發(fā)。不像 CGI 是與開發(fā)者所使用的程序語言完全無關(guān),除了 C 之外,常用的還有 Perl,Tcl等。

  3. Netscape Enterprise Server 和 Microsoft IIS 都是以多執(zhí)行緒 (Multi-Threads) 的方式處理 NSAPI 及 ISAPI 的程序,所有執(zhí)行緒共享同一塊變量空間,因此在變量數(shù)據(jù)的處理上要特別小心,以確保每一個執(zhí)行緒內(nèi)的變量資料的安全,不會互相影響。

  4. NSAPI 和 ISAPI 應(yīng)用程序都是直接在服務(wù)器的執(zhí)行行程 (process) 內(nèi)被呼叫,如果程序當(dāng)?shù)袅,整個網(wǎng)站服務(wù)器都會被影響。CGI 當(dāng)?shù)舴⻊?wù)器會響應(yīng) Internal Server Error 的訊息,服務(wù)器本身不受影響。

  5. NSAPI 和 ISAPI 應(yīng)用程序必須被服務(wù)器呼叫才會被執(zhí)行,偵錯 (debug) 相當(dāng)不容易。