麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

使用Kylix3開發Apache DSO

2019-11-17 05:14:46
字體:
來源:轉載
供稿:網友

  2003 年 1 月
kylix是linux下非常好的集成開發工具(個人認為是windows程序員轉向Linux最適合的),前一段工作中使用Kylix3進行了Apache動態共享對象(DSO)的開發,在開發工作中碰到了許多的問題,經過摸索一一解決了,有些經驗給大家共享,以免后來者走彎路。

為什么要采用DSO
最重要的原因是效率。Apache是模塊化設計的,所以它可以加載各種各樣的服務器端腳本解釋器來支持動態的網頁。我以前開發的是cgi,但是隨著頁面訪問量的增大,cgi已經不看重負,我需要提高效率。由于原有的代碼量很大,我基本上不可能重新寫php或者jsp來代替他們,所以我選擇了把最常調用的模塊編譯成動態共享對象(DSO).。

還有一個原因,cgi程序是短連接,不能保存用戶的狀態信息,假如采用常駐內存的DSO,那么這個問題也可以迎刃而解了。

很重要的版本問題
用kylix開發DSO過程中的版本問題是非常重要的。開源的Apache更新的很快,Apache 1.*版本和2.*版本的DSO格式是不一樣的,一定要考慮到。Delphi6/kylix2編譯出來的DSO是對應Apache 1.*版本的。我使用的是kylix3和Apache2.0.43,Borland的官方網站上說kylix3不支持Apache2 的DSO,這讓我郁悶了很長時間。后來知道了Delphi7支持Apache2的消息,而Delphi7的CLX技術是跨平臺的,這讓我找到了解決的辦法。

Delphi7的DSO2工程里要引用HTTPD2、ApacheTwoHTTP和ApacheTwoApp(DSO1對應的是HTTP、ApacheHTTP和ApacheApp),那么我就將Delphi7安裝目錄下源代碼目錄中對應的pas文件拷貝出來,存放到kylix3的源代碼目錄下然后編譯。我查看過源代碼,里面有跨平臺條件編譯的符號,所以這種做法是可行的。

模塊的工作原理
Apache模塊可以在Apache中登記它們提供函數的回叫信號。回叫是一種可以在Apache中登記的函數,Apache可以在請求進程循環中的多個階段調用該函數。回叫通常作為進程的非凡事件處理程序登記。多數Apache為模塊登記回叫函數提供的鏈接都是HTTP請求循環的一部分。Apache當前定義了11種請求循環階段,模塊可以登記回叫函數。它們依次為:讀后請求(Post-Read)、URL翻譯、頭部解析、訪問控制、身份驗證、授權、MIME類型檢查、修正(FixUp)、響應或滿足、日志記錄、清除。

編譯Apache支持DSO
不幸的是,默認的Apache配置是不支持DSO的,所以我們必須修改配置文件然后重新編譯,我是直接通過命令行完成的。這個不難,把得到的httpd*.tar.gz文件解包后,進入該目錄,鍵入如下的命令:

./configure -enable-so
make
make install


在編譯過程中假如出現了問題的話,查看一下出錯的信息,一般都是沒有相應的開發包造成的,把開發包裝上就行了。默認安裝在/user/local/apache2/目錄,假如你要有別的配置要求,鍵入./configure -help自己看看吧。

開發 DSO
有了前面的預備工作,使用Kylix開發DSO就變得非常簡單了,只需要在建立工程的時候選擇生成Apache DSO,和建立CGI沒有什么不同,Kylix把不同的地方透明化了。

在工程文件中還要作如下修改:

默認建立的工程文件(以webSnap工程為例):

Library PRoject1
Uses
WebBroker,
ApacheApp,
……
{$R *.res}
eXPorts
apache_module name 'Project1_module'
….
….


把Uses中的ApacheApp改為ApacheTwoApp,加入HTTPD2,為什么要這么改不用我解釋了吧^__^。還有一個要修改的地方是HTTPD2.pas文件,找到常量定義的地方,把這個常量MODULE_MAGIC_NUMBER_MAJOR的值改為20020903,這樣Apache2才認這個DSO,切記。

由于DSO是常駐內存的,它不像cgi那樣可以在進程退出時自動釋放所有的資源,所以資源分配和回收的問題尤其重要。在取得數據庫中的數據后一定要記得在適當的析構函數中把數據庫連接關閉,建立某些堆對象使用后一定要釋放內存。當然,不管開發什么樣的程序,這都是一個合格程序員應該做的。

調試DSO有點麻煩,在Borland的官方網站上有介紹,但是我使用我的方法調試,你可以自己決定用什么方法。我先做一個Cgi工程調試,在入口加死循環,然后用kylix自帶的進程捕捉功能捕捉被啟動的cgi,把循環標志位置為假就可以繼續單步執行了。調試完畢確認無誤后建立新的DSO工程,刪除工程原有的單元文件,接著把剛才cgi工程里的所有單元文件加到這個工程里來重新編譯就行了。


部署DSO
當然要修改Apache的配置文件了,做linux下的開發少不了這些操作。

進入apache安裝目錄下的conf目錄,修改httpd.conf文件,加入如下的文字:

LoadModule XXX modules/YYY.so
<Location /ZZZ>
SetHandler YYY-handler
</Location>


啟動Apache后,就可以輸入http://主機名/ZZZ 調用你部署的DSO了。需要注重的問題是,XXX你自己定義的Apache模塊的名稱,在這里你可以寫Project1_module,后面跟的是模塊文件的所在位置,一般都放在modules下,YYY是生成的so文件的名字,在這里應該是Project1.so。假如在啟動或者運行的過程中有一些so文件找不到的話,需要在配置文件里加上SetEnv LD_LIBRARY_PATH so文件所在的路徑。

實例向導
在這里我使用經典的helloWord作為實例,你可以通過這個例子走上Apache DSO開發的漫長道路。現在通過上面的講解,我假設你已經使你的Apache支持DSO了,我們以此為起點一步一步向下走。

1 建立一個websnap工程文件,選擇Apache DSO。命名為helloWorldP.dpr


2 修改源代碼文件

3 修改頁面文件輸出helloWorld。

見下圖所示。假如你要完成其他的功能,和普通的cgi是一樣的。這里只是一個簡單的小例子,并不完成真正的websnap工作。

4 編譯這個工程

kylix的默認設置里會為你生成的DSO文件加上lib前綴,所以你可以看到在你保存工程文件的地方新生成了一個文件libhelloWordP.so,這就是生成的DSO文件。把這個文件拷貝到Apache安裝目錄的modules子目錄下。

5 改寫Apache配置文件

進入apache安裝目錄下的conf目錄,修改httpd.conf文件,加入如下的文字:

LoadModule helloWorld_module modules/helloWorldP.so
<Location /hello>
SetHandler helloWorldP-handler
</Location>


6 興奮的時刻到了
我說的可不夸張,當我經歷了種種出錯提示之后就是這種感覺。現在重啟Apache,在
瀏覽器中敲入http://你的服務器名/hello ,hello就是你在配置文件中包含在Location定
位符后面的文字,不能與已經存在的其他cgi等定位重名(我曾深受其害)。 假如沒有問
題的話,你會看到下面的東西:
就是這些了,這僅僅是個開始,接著開始你的工作吧, 你會發現linux下的開發也是
很有意思的。需要注重的是,在linux下大小寫是敏感的,千萬不要把windows下的壞習慣
來過來,那樣你會白白耽誤很多時間。

參考資料:

* 《linux Apache Web Server治理指南》
* 你可以在這里找到更多的開發參考:http://www.thedelphimagazine.com/
* 關于linux下的開發,在IBM DeveloperWorks有很多的中文參考。

關于作者:
侯光敏,對未知事務布滿好奇的程序員,飄在北京。 目前使用Kylix做linux下的Web
開發,也使用java進行開發工作。我的電子郵件 [email protected], 不要發廣告和垃
圾郵件,求求你了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 性爱网站| 日韩一级视频 | 香蕉国产片 | 欧美一区二区三区久久精品视 | 成码无人av片在线观看网站 | 免费a级网站 | 最近中文字幕一区二区 | 国产成人高潮免费观看精品 | 久久精品中文字幕 | 免费一级a毛片免费观看 | 色成人在线 | 日日操日日操 | 伊人亚洲精品 | www.91tv| 日本不卡二区 | 精品一区二区三区免费视频 | 国产午夜三级一区二区三桃花影视 | 永久av在线免费观看 | 欧美成人午夜一区二区三区 | 在线播放视频一区二区 | 色999中文字幕 | 欧美一级黄色影院 | 国产中文av在线 | 亚洲免费看片网站 | 久久久久女人精品毛片九一 | 一级毛片免费高清视频 | 色欧美视频 | 欧美成在线视频 | 香蕉国产精品 | 99视频网址 | 亚洲日本韩国在线观看 | 欧美中文字幕在线视频 | 久久久久久久.comav | 成年人激情在线 | 久久69精品久久久久久国产越南 | av手机免费在线观看 | 国产乱一区二区三区视频 | 一边吃奶一边摸下娇喘 | 毛片久久| 国产一区二区三区在线观看视频 | 视频二区国产 |