[摘要]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) 相当不容易。
……