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