Fcgi
使用 VB6 编写您的 Web 应用程序后端! VbFcgi 可以轻松利用您当前的编程知识,甚至可以在网络上获取现有的 VB6 客户端/服务器应用程序。
介绍
VbFcgi 是一个用于 Visual Basic 6 (VB6) ActiveX/COM DLL Web 应用程序的 FCGI 主机/服务器框架。它是针对 Nginx 开发的,但应该适用于任何实现 FCGI 规范的 Web 服务器。
流程图
包含的二进制文件
VbFcgi 框架有 3 个主要组件:
- VbFcgiLib.dll - 这是主要框架库,包括用于侦听和响应来自 Web 服务器的 FCGI 请求的所有代码,以及解析 FCGI 参数、HTTP cookie 等记录...应包含此文件与 FCGI 应用程序的每个发行版一起。
- VbFcgiHost.exe - 这是主要的可执行文件,它将生成 FCGI 侦听器作为 Web 服务器和 FCGI 应用程序之间的代理。它支持在顺序端口上运行多个侦听器以实现负载平衡,并且还监视需要重生的已终止侦听器。最后,它还充当所有正在运行的 FCGI 侦听器实例的关闭协调器。该文件应包含在 FCGI 应用程序的每个发行版中。
- VbFcgiApp.dll - 这是演示 FCGI 应用程序代码。这里包含的版本是一个非常基本的概念验证,它将向上游发送一个 HTML 页面,其中包含收到的 FCGI 参数表,还演示了 cookie 和 HTTP 查询参数的基本用法。分发时不应包含该文件您自己的 FCGI 应用程序!相反,您应该创建您自己的版本,如下面创建您自己的 FCGI 应用程序部分所述。
虽然上述 DLL 是 COM ActiveX 库,但在部署给用户时不需要使用 regsvr32 注册它们,因为此代码使用 Olaf Schmidt 的免注册 DirectCOM 库。但是,您应该在您的开发计算机上注册上述 DLL。
还包括 Nginx 的二进制版本,其基本配置支持 localhost:9100 上的单个 FCGI 主机服务器侦听器。包含此内容是为了方便并演示最小配置。在大多数情况下,您应该运行自己正确配置的 Nginx(或其他 Web 服务器)。
最后,为了方便起见,我还捆绑了 Olaf Schmidt 优秀的 vbRichClient5 库 (http://www.vbrichclient.com/)。您始终可以从 vbRichClient5 网站获取最新版本。
演示用法
- 如果您尚未运行 Web 服务器,请从命令行启动 nginx,方法是转至 .VbFcgibinnginx 文件夹,然后运行 nginx.exe 命令。如果您已经有一个正在运行的 Web 服务器,请确保将其配置为将 *.fcgi 请求从上游浏览器传递到 127.0.0.1 端口 9100。
- 从命令行,使用以下命令启动 VbFcgiHost.exe: vbfcgihost.exe /host 127.0.0.1 /port 9100 /spawn 1
- 打开浏览器并访问 http://127.0.0.1/vbfcgiapp.fcgi - 您应该看到来自演示 FCGI 应用程序的 HTML 响应。
创建您自己的 FCGI 应用程序
您可以使用包含的 VbFcgiApp 源代码作为起点 - 所有工作都在 IFcgiApp_ProcessRequest 方法中完成,因此请对其进行彻底审查。
为了从头开始编写您自己的 FCGI 应用程序,您必须:
- 在 VB6 中启动一个新的 ActiveX DLL 项目。
- 将项目名称从“Project1”更改为“MyFcgiApp”(或您希望的任何名称)。
- 将“Class1”的名称更改为“CFcgiApp”。
- 从“项目”菜单 >“引用”添加对 VbFcgiLib 的引用。
- 在“CFcgiApp”类的常规部分中,键入;实现 VbFcgiLib.IFcgiApp
- 从代码视图的下拉列表中选择“IFcgiApp”。它将为您创建 IFcgiApp_ProcessRequest 方法。
- 在 IFcgiApp_ProcessRequest 方法中编写您的应用程序(该死的猫头鹰的其余部分)。
- 构建您的 DLL 应用程序。
- 复制构建的 DLL 并将扩展名更改为 .fcgi。
- 将 .fcgi 文件移至与 VbFcgiHost.exe 和 VbFcgiLib.dll 文件相同的文件夹。
注意:在分发 FCGI 应用程序 DLL 和 VbFcgiLib.dll 时,您不需要注册它,因为该框架使用免注册实例化。
当您随后运行 VbFcgiHost.exe 时,它将使用您的 .fcgi 作为“插件”(某种形式)来响应相应的 FCGI 请求。例如,输入 http://localhost/myapp.fcgi 将导致 VbFcgiHost 从存储在同一文件夹中的 myapp.fcgi DLL 创建 CFcgiApp 类的实例,然后它将调用该类中的 IFcgiApp_ProcessRequest。
享受!