- 浏览: 2035602 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
Mark R. Brown 文档版本:1.08 FastCGI是对CGI的开放的扩展,它为所有因特网应用提供高性能,且没有Web服务器API的缺点(penalty)。 FastCGI被设计置于现存的Web服务器API之上。例如,Apache模块mod_fastcgi向Apache服务器添加FastCGI支持。FastCGI也能用在任何支持CGI的Web服务器上,只有简化的功能和下降的性能。 本FastCGI开发者套件被设计用来使得开发FastCGI应用更容易。当前套件支持用C/C++、Perl、Tcl和Java编写的FastCGI应用。 本文档: 套件中包含技术白皮书,doc/fastcgi-whitepaper/fastcgi.htm。在开始编写FastCGI应用以前,你应当至少阅读技术白皮书的前三章。性能论文将帮助你理解带FastCGI的应用设计如何影响性能。 FastCGI规范,doc/fcgi-spec.html,定义FastCGI应用和支持FastCGI的Web服务器之间的接口。套件中的软件实现了该规范。编写应用不需要阅读规范。 在FAQ文档中提供了附加信息,它包括与利用FastCGI的应用开发有关常见问答,还有一些一般性信息。 对于编写FastCGI应用,CGI编程经验是极有价值的。如果你没有足够的CGI编程经验,你应当阅读一本关于该主题的普及书籍,或者学习NCSA CGI页。CGI/1.1的更正式的论述见因特网CGI 1.1规范草案。 套件是个压缩的tar(tar.Z)文件,通过fastcgi.comWeb页分发。解包该tar文件会创建一个新目录fcgi-devel-kit。 使用Web浏览器的“打开文件”命令打开套件的索引页,fcgi-devel-kit/index.html。索引页给你套件结构的纵览,并帮助你游览套件。索引页也包括运行示例应用的链接,但是当利用“打开文件”命令打开index.html时,应用不会工作,因为它们不是通过Web服务器访问的。 为了 in earnest 地使用套件,你将需要一个由自己控制的Web服务器,一个以你的用户ID运行的Web服务器。Web服务器会启动你要调试的FastCGI应用;如果这些 进程以你的用户ID运行,将带给你极大的方便。最好拥有支持FastCGI的Web服务器。第4章论述Web服务器问题。 如果可以,把套件保存在从你的个人工作站可存取的文件系统上,在你的工作站上执行构建并在其上运行你的Web服务器。如果不行,调整配置以使套件从你的 Web服务器的机器可存取,并在某机器上构建套件和你的应用,该机器的配置方式同你的Web服务器完全一样。 要构建套件,在fcgi-devel-kit目录中执行该命令序列: 我们已经在这些平台上构建和应用了套件(以字母顺序列出): 一旦构建了套件,就可依据第4章中的说明 bring up 你的Web服务器并运行示例应用。 fcgi_stdio库为C CGI程序和程序员提供到FastCGI的最轻松的过渡。利用该库,你的应用既可用CGI运行,也可用FastCGI,这两种情况使用相同的库。 我们给出一对例子来介绍fcgi_stdio库:一个微型CGI程序和该程序向FastCGI的迁移。这两个示例程序被包括在套件中。 CGI程序是examples/tiny-cgi.c: 该微型CGI程序的主要特性是: 本例中的count变量退化了;CGI程序执行单个请求,所以请求数总是1。在FastCGI例子中该变量会更有意思。 相应的FastCGI是examples/tiny-fcgi.c: 该微型FastCGI程序的主要特性是: 每次通过循环,count变量都递增,所以每次程序都显示不同的请求数。一旦你已经构建并运行,你可用浏览器中的刷新按钮示范这一点。 如果你能构建examples/tiny-cgi.c,则构建examples/tiny-fcgi.c对你来说将会很容简单。你需要: 构建这两个程序的Makefile可见examples/Makefile(由configure创建)。Autoconf处理平台依赖的链接问题;要知道如何做的,分析configure.in和examples/Makefile.in。 第4章全都是关于如何运行FastCGI应用的。 你能用CGI运行同fcgi_stdio库一起构建的应用程序。FCGI_Accept函数测试其环境以确定应用是如何被调用的。如果是作为CGI程序被调用,则首次访问FCGI_Accept实际上是个空操作,而且第二次访问返回-1。结果是请求循环消失了。 当然,当FastCGI应用使用CGI运行时,它得不到FastCGI的好处。例如,应用在给单个请求提供了服务后退出,这样它不能维持缓存的信息。 fcgi_stdio.h首先包含stdio.h,然后定义宏以替换原来在stdio.h中定义的所有类型和例程,通过这种方式起作用。(stdio.h定义了几个与FILE *无关的例程,例如sprintf和sscanf;fcgi_stdio.h不会替换它们。)例如,FILE变成FCGI_FILE,printf 变成FCGI_printf。如果阅读fcgi_stdio.h或者在预处理后分析C源代码,你将只看到这些新名字。 这种实现技术的一些结果是: 用于多次包含防护的特殊符号,本例中是_STDIO_H,因平台而异。只要你的平台针对多次包含对stdio.h进行保护,你就能不管这个问题。 促使gcc在读取模块wonderlib.c以前就包含fcgi_stdio.h。 这里的MungeStream是你不能重新编译的库函数,FCGI_ToFile是把FCGI_FILE *转换为FILE *的宏。宏FCGI_ToFile在fcgi_stdio.h中定义。 把CGI程序转换为FastCGI程序的主要任务是分离代码,从每次请求都需要运行的代码中分离出只需要执行一次的初始化程序的代码。在我们的微型例子中,初始化count变量在循环外面,而递增count变量在内部。 保持应用状态可能是个问题。你必须确保在处理一个请求中创建的任何应用状态不会无意识地影响后来的请求。FastCGI通过缓存提供有效的应用性能提升的可能;让缓存正确地运转取决于你。 内存泄漏可能是个问题。很多CGI程序不用担心内存泄漏,因为程序不会运行足够长的时间使之膨胀到构成问题。当转换到FastCGI时,你能使用类似Purify的工具从纯软件(Pure Software)来发现和修正内存泄漏,也能从Geodesic系统(Geodesic System)运行类似Great Circle的C垃圾收集器。 当前fcgi_stdio库提供的兼容性存在一些限制: FCGI_Accept man页,doc/FCGI_Accept.3以传统形式描述了该函数。 FCGI_Finish(doc/FCGI_Finish.3),FCGI_SetExitStatus(doc/FCGI_SetExitStatus.3)和FCGI_StartFilterData(doc/FCGI_StartFilterData.3)man页阐释了没有在上面说明的fcgi-stdio库的能力。 fcgiapp库是FastCGI的第二个C库。它不提供fcgi_stdio那样高度的源代码兼容性;作为回报,它没有大量地使用#define。fcgi_stdio实现为fcgiapp之上的薄层。 使用fcgiapp库构建的应用不能作为CGI程序运行;那个特性在fcgi_stdio层提供。 在fcgiapp中定义的函数使用前缀FCGX_命名,而不是FCGI_。例如,FCGX_Accept是fcgiapp版的FCGI_Accept。 fcgiapp库的文档采取在头文件include/fcgiapp.h中的大量的注释的形式。示例程序examples/tiny-fcgi2.c和examples/echo2.c示范如何使用fcgiapp。 A major advantage of the FastCGI approach to high-performance Web applications is its language-neutrality. CGI scripts written in popular languages such as Perl and Tcl can be evolved into high-performance FastCGI applications. We have produced FastCGI-integrated Perl and Tcl interpreters. Doing so was easy, since Perl and Tcl are conventional C applications and fcgi_stdio was designed for converting conventional C applications. Essentially no source code changes were required in these programs; a small amount of code was added in order to make FCGI_Accept and other FastCGI primitives available in these languages. And because these interpreters were developed using fcgi_stdio, they run standard Perl and Tcl applications (e.g. CGI scripts) as well as FastCGI applications. See the fastcgi.com Web page for more information about the Perl and Tcl libraries. Here are the Perl and Tcl versions of tiny-fcgi: Converting a Perl or Tcl CGI application to FastCGI is not fundamentally different from converting a C CGI application to FastCGI. You separate the portion of the application that performs one-time initialization from the portion that performs per-request processing. You put the per-request processing into a loop controlled byFCGI::accept (Perl) or FCGI_Accept (Tcl). Java不只适合于基于浏览器的小程序片。它已然适合编写一些Web服务器应用,而且随着Java编译器和其他Java工具的改进,它的应用范围将会增长。Java的模块、垃圾收集和线程对于编写常驻的应用服务器尤其有价值。 FCGIInterface类给Java应用提供设施,就像fcgi_stdio为C应用提供的那样。使用该库,你的Java应用能利用CGI或FastCGI运行。 套件中包括关于结合Java和FastCGI的独立的自带文档。FastCGI的源代码包含在目录java/src中,已编译代码在java/classes中。 这是Java版的tiny-fcgi: 当前支持FastCGI的Web服务器的列表见fastcgi.com网页。 一些支持FastCGI的Web服务器执行FastCGI应用的管理。你不需要启动和停止FastCGI应用;Web服务器会照看它。如果应用进程崩溃了,Web服务器重启它。 Web服务器通过新的配置指令支持FastCGI。由于这些指令是特定于服务器的,从每种服务器自带的文档获得更多信息。 程序cgi-fcgi允许你利用任何支持CGI的Web服务器运行FastCGI应用。 这里是cgi-fcgi如何运转的。cgi-fcgi是使用Unix域或TCP/IP socket与FastCGI应用通信的标准CGI程序。cgi-fcgi接受路径名或正监听的socket的主机/端口名为参数,并且连接到在那个socket上监听的FastCGI。然后cgi-fcgi把CGI环境变量和stdin数据转送到FastCGI应用,并把stdout和stderr数据从FastCGI应用转送到Web服务器。当FastCGI应用通知响应结束时,cgi-fcgi刷新其缓冲器并退出。 很显然,cgi-fcgi不如集成了FastCGI支持的服务器: 但是cgi-fcgi允许你开发这样的程序,它们在连接之间在内存中保持状态,这样做常常提供了超过常规的CGI的主要性能提升。而且你开发的使用cgi-fcgi的所有应用将能与集成了FastCGI支持的Web服务器合作。 在案例examples/tiny-fcgi应用中,文件examples/tiny-fcgi.cgi示范一种用cgi-fcgi运行典型的应用的方式: 在多数Unix平台上,执行本命令解释器文件会以-f和examples/tiny-fcgi.cgi为参数运行cgi-fcgi。(注意:在一些Unix平台上,包括HP-UX,命令解释器文件的第一行不能含有超过32个字符,包括换行符在内;你可能需要在类似/usr/local/bin的标准位置安装cgi-fcgi应用,或者在含有你的应用的目录中创建到cgi-fcgi的符号连接。)cgi-fcgi程序读取本命令解释器文件并连接其监听的socket为examples/sockets/tiny-fcgi的FastCGI应用。 继续这个例子,如果cgi-fcgi的连接尝试失败了,它创建一个新进程来运行程序examples/tiny-fcgi并监听socketexamples/sockets/tiny-fcgi。然后cgi-fcgi重新进行连接尝试,现在应该会成功。 cgi-fcgi程序还有两种操作方式。其中一种它连接到应用但是不启动它们;另一种它启动应用但是不连接它们。当使用TCP/IP时这些方式是必需的。cgi-fcgi man页,doc/cgi-fcgi.1,告讲述全部情况。 要用cgi-fcgi运行示例应用,启动你的Web服务器并给它fcgi-devel-kit目录为其URL空间的根。如果运行你的Web服务器的机器称为bowser,并且你的服务器运行在端口8888上,你当打开URL http://bowser:8888/index.html以到达套件的索引页。现在索引页上通过cgi-fcgi运行示例应用的链接应该是有效的。 On Digital UNIX 3.0 there's a problem with Unix domain listening sockets on NFS file systems. The symptom when using cgi-fcgi is an exit status of 38 (ENOTSOCK: socket operation on non-socket), but cgi-fcgi may dump core in this case when compiled optimized. Work-around: Store your Unix domain listening sockets on a non NFS file system, upgrade to Digital UNIX 3.2, or use TCP sockets. On AIX there's a problem with shared listening sockets. The symptoms can include application core dumps and kernel panic. Work-around: Run a single FastCGI application server per listening socket. 邮件列表fastcgi-developers用于开发FastCGI应用中的问题的讨论。其主题包括支持FastCGI的Web服务器或它们的变更的公告,新应用库或它们的变更的公告,已知bug的公告,FastCGI应用编程中的设计折衷方案的讨论,以及开发计划和经验的讨论。要加入列表,参阅http://fastcgi.com/fastcgi-developers。 在FastCGI主页http://www.fastcgi.com上有邮件存档的链接。
FastCGI开发者套件
FastCGI开发者套件
Open Market, Inc.
1996年6月11日Copyright © 1996 Open Market, Inc. 245 First Street, Cambridge, MA 02142 U.S.A.
Tel: 617-621-9500 Fax: 617-621-1703 URL: http://www.openmarket.com/
$Id: fcgi-devel-kit.htm,v 1.6 2002/02/25 00:42:59 robs Exp $
1. 介绍
2. 入门指南
% ./configure
% make
3. 编写应用
3.1 使用fcgi_stdio库
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int count = 0;
printf("Content-type: text/html\r\n"
"\r\n"
"<title>CGI Hello!</title>"
"<h1>CGI Hello!</h1>"
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_NAME"));
}
#include "fcgi_stdio.h"
#include <stdlib.h>
void main(void)
{
int count = 0;
while(FCGI_Accept() >= 0)
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI Hello!</title>"
"<h1>FastCGI Hello!</h1>"
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_NAME"));
}
构建程序
运行程序
实现细节
#ifndef _STDIO_H
#define _STDIO_H gcc -include /usr/local/include/fcgi_stdio.h wonderlib.c
FILE *myStream = fopen(path, "r");
answer = MungeStream(FCGI_ToFile(myStream));转换CGI程序
局限
FILE *myStream = fopen(path, "r");
count = fscanf(FCGI_ToFile(myStream), format, ...);参考文献
3.2 使用fcgiapp库
3.3 使用Perl和Tcl
#!./perl
use FCGI;
$count = 0;
while(FCGI::accept() >= 0) {
print("Content-type: text/html\r\n\r\n",
"<title>FastCGI Hello! (Perl)</title>\n",
"<h1>FastCGI Hello! (Perl)</h1>\n";
"Request number ", ++$count,
" running on host <i>";$env(SERVER_NAME)</i>");
}#!./tclsh
set count 0
while {[FCGI_Accept] >= 0 } {
incr count
puts -nonewline "Content-type: text/html\r\n\r\n"
puts "<title>FastCGI Hello! (Tcl)</title>"
puts "<h1>FastCGI Hello! (Tcl)</h1>"
puts "Request number $count running on host <i>$env(SERVER_NAME)</i>"
}3.4 使用Java
import FCGIInterface;
class TinyFCGI {
public static void main (String args[]) {
int count = 0;
while(new FCGIInterface().FCGIaccept()>= 0) {
count ++;
System.out.println("Content-type: text/html\r\n\r\n");
System.out.println(
"<title>FastCGI Hello! (Java)</title>");
System.out.println("<h1>FastCGI Hello! (Java)</h1>");
System.out.println(
"request number " + count + " running on host <i>" +
System.getProperty("SERVER_NAME") + "</i>");
}
}
}4. 运行应用
4.1 使用支持FastCGI的Web服务器
4.2 在任何Web服务器上使用cgi-fcgi
#!../cgi-fcgi/cgi-fcgi -f
-connect sockets/tiny-fcgi tiny-fcgi5. 已知的问题
6. 获得支持
© 1996, Open Market, Inc. / mbrown@openmarket.com
发表评论
-
lighttpd ip限制
2010-09-08 14:40 1864#限制 '/cgi-bin/' 的ip访问 $HTTP ... -
ighttpd学习笔记(安装配置,文件压缩,限制IP和限制速度,expire, rewirte)
2010-09-08 11:17 1332ighttpd学习笔记(安装配置,文件压缩,限制IP和限 ... -
fastcgi部署
2010-08-02 09:33 1457//install lighttp tar -xzvf ... -
Lighttpd基础优化
2010-07-08 17:24 3800Lighttpd基础优化 lighttp ... -
FastCGI的并发处理
2010-04-22 16:37 4265FastCGI的并发处理 我还没找到异步处理的方式 ... -
Ubuntu下的apache2 + fastcgi配置
2010-04-21 10:49 4399Ubuntu下的apache2 + fastcgi配置 最近 ... -
理解FastCGI应用的性能
2010-04-20 14:38 1467理解FastCGI应用的性 ... -
FCGI_StartFilterData.3
2010-04-20 14:38 1443FCGI_StartFilterData.3 ... -
FCGI_SetExitStatus.3
2010-04-20 14:37 1172FCGI_SetExitStatus.3 ... -
FCGI_Finish.3
2010-04-20 14:37 1883FCGI_Finish.3 ... -
FCGI_Accept.3
2010-04-20 14:36 7163FCGI_Accept.3 ... -
FastCGI规范
2010-04-20 14:36 16222FastCGI规范 ... -
FastCGI开发者套件
2010-04-20 13:45 2216FastCGI开发者套件 ...
相关推荐
PHP环境套件是一种用于快速搭建PHP开发环境的工具,它集成了Web服务器、PHP解释器、数据库等组件,使得开发者无需手动配置各个组件,就能在本地或服务器上运行PHP应用程序。这里的“php环境套件”特别强调了支持自主...
"phpfind2013套件"是一款专为开发者设计的工具,旨在简化PHP与Nginx集成环境的搭建过程。这款套件包含了PHP和Nginx这两个关键组件,使得用户能够快速、方便地创建一个适合PHP应用开发的服务器环境。 PHP(Hypertext...
2. **下载护卫神PHP套件**:根据你的操作系统和需求,选择ISAPI或FastCGI版本进行下载。ISAPI版本适用于较旧的Windows 2003系统,而FastCGI版本则提供了更好的性能和稳定性。 3. **安装护卫神PHP套件**:解压下载的...
1. "护卫神·PHP套件(FastCGI-PHP5.4.31-32bit).exe":这是核心安装程序,包含PHP 5.4.31的FastCGI版本,适用于32位系统。FastCGI是一种高性能的处理动态内容的方式,它可以持久地保持多个PHP进程,以提高服务器响应...
- Appweb采用模块化架构,允许开发者根据需求选择安装和配置特定功能,如HTTP/1.1、HTTPS、CGI、FastCGI、WebSocket等。 - 这种架构使得Appweb具有高度可定制性,可以根据应用需求进行扩展。 3. **HTTP/2支持** ...
UPUPW是一款针对Windows平台设计的、集成了MySQL数据库的服务器环境套件,它旨在为开发者提供一个便捷、快速的开发和测试环境。这款工具尤其适合那些需要在Windows系统下运行PHP、MySQL等服务的用户。UPUPW包含了...
本资料包"**Nginx-for-WordPress-Configurations-源码.rar**"提供了Nginx与WordPress整合的详细配置示例,旨在帮助开发者和网站管理员优化其服务器性能,提高网站的响应速度和用户体验。 首先,我们需要理解Nginx的...
3. **配置环境**:安装完成后,需要根据项目需求对PHP环境进行配置,如设置PHP的运行方式(FastCGI或mod_php)、修改php.ini文件中的配置项(如max_execution_time、memory_limit等),以及配置虚拟主机。...
同时,增加了缺失的功能以提高对标准的遵循,并支持ECMA-262和第五版测试套件,以及CommonJS模块和包API。 3. **增强的I/O**和**Web框架**:改进了网络交互和Web开发框架的性能和功能。 4. **增强的可配置性**:...
PHP解释器通常作为Web服务器的模块存在,如mod_php,或者作为独立的CLI(命令行接口)进程,如php-cgi或FPM(FastCGI Process Manager)。 3. **数据库**:如MySQL、PostgreSQL等,用于存储和管理网站数据。PHP提供...
【Apache 2.4.27 x64】是一个针对64位操作系统的...总之,Apache 2.4.27 x64是构建高性能Web服务和Tomcat集群的理想选择,它的强大功能和灵活性使得开发者能够根据需求进行定制和扩展,满足不同规模和类型的网站需求。
搭建PHP本地测试环境和MySQL数据库的建立是Web开发过程中至关重要的步骤,这使得开发者可以在本地进行网站或应用程序的开发和调试,而无需实时部署到服务器。以下是一个详细教程,指导如何在Windows环境下进行这些...
2. **安全增强**:Apache 2.2增强了SSL/TLS支持,提供更好的加密选项,如支持更高级别的加密套件,以提高网站的安全性。 3. **性能优化**:包括更好的多线程处理,更有效的内存管理,以及对Keep-Alive连接的改进,...
在Windows上,可以使用XAMPP或WAMP套件快速搭建;在Linux上,可以使用apt-get或yum命令安装Apache和PHP。 - Nginx + PHP:Nginx以其高性能和低内存占用而闻名,它通过与PHP-FPM(FastCGI Process Manager)配合来...
安装PHP时,需要将其添加到系统路径中,并配置Nginx以识别.php文件并传递给PHP-FPM(FastCGI Process Manager)进行处理。 **phpMyAdmin** 是一个用PHP编写的开源工具,用于管理和维护MySQL数据库。它提供了一个...
3. 在选择组件时,确保选中"IIS FastCGI"或"IIS ISAPI"扩展,以便PHP可以与IIS集成。 4. 完成安装后,IIS应该能识别PHP脚本,并将其发送给PHP解释器处理。 安装PHP后,我们需要连接到MySQL数据库。这需要PHP支持...
5. **IIS或Apache集成**:如果你使用IIS作为Web服务器,可以使用FastCGI进行集成;如果使用Apache,安装`mod_php`模块。 6. **测试安装**:在命令行中运行`php -v`,查看PHP版本,证明安装成功。 **三、开发环境...
3. **单元测试**:使用`phpunit`这样的测试框架,通过CLI运行测试套件,确保代码质量。 4. **任务调度**:配合`cron`或类似的定时任务服务,定期执行PHP脚本,实现定时任务。 5. **性能分析**:使用`Xdebug`或`...
开发者需要安装PHP解释器,例如在Windows系统上使用XAMPP或WAMP套件,或者在Linux/Unix系统上配置LAMP环境。 【PHP的主要特性】 1. **动态内容生成**:PHP可以动态生成HTML,根据用户的请求或服务器状态提供不同的...
3. ISAPI的作用:ISAPI是IIS的一种扩展方式,允许开发者编写可以直接集成到IIS中的动态链接库(DLL),从而提供比CGI(Common Gateway Interface)更高的性能和更好的交互性。 4. PHP版本的选择:作者选择了5.3之前...