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。
享受!