亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

使用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中登記它們提供函數的回叫信號?;亟惺且环N可以在Apache中登記的函數,Apache可以在請求進程循環中的多個階段調用該函數?;亟型ǔW鳛檫M程的非凡事件處理程序登記。多數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開發的漫長道路?,F在通過上面的講解,我假設你已經使你的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 興奮的時刻到了
我說的可不夸張,當我經歷了種種出錯提示之后就是這種感覺?,F在重啟Apache,在
瀏覽器中敲入http://你的服務器名/hello ,hello就是你在配置文件中包含在Location定
位符后面的文字,不能與已經存在的其他cgi等定位重名(我曾深受其害)。 假如沒有問
題的話,你會看到下面的東西:
就是這些了,這僅僅是個開始,接著開始你的工作吧, 你會發現linux下的開發也是
很有意思的。需要注重的是,在linux下大小寫是敏感的,千萬不要把windows下的壞習慣
來過來,那樣你會白白耽誤很多時間。

參考資料:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久99| 日韩精品在线观看一区| 欧美国产日韩一区| 国产精品视频久久久久| 中文字幕亚洲二区| 91精品国产亚洲| 国产91|九色| 精品久久中文字幕久久av| 亚洲成色www8888| 亚洲欧美日韩国产中文专区| 91国内精品久久| 亚洲欧洲日韩国产| 欧美成年人视频网站| 97在线视频精品| 亚洲黄色在线观看| 自拍偷拍亚洲在线| 亚洲xxxx做受欧美| 久久久国产精品亚洲一区| 亚洲视频电影图片偷拍一区| 北条麻妃一区二区在线观看| 国产欧美日韩丝袜精品一区| 91精品国产91久久久| 日韩av男人的天堂| 国产成人91久久精品| 国产免费一区二区三区在线观看| 国产视频在线一区二区| 国产视频久久网| 国产99在线|中文| 欧美与欧洲交xxxx免费观看| 国产原创欧美精品| 中文字幕视频在线免费欧美日韩综合在线看| 日韩高清人体午夜| 欧美午夜美女看片| 欧美日韩免费一区| 亚洲男人天天操| 在线精品91av| 久久久精品国产一区二区| 国产精品精品视频一区二区三区| 欧美精品videosex性欧美| 日韩在线观看免费| 久久久久亚洲精品成人网小说| 国产精品一二三在线| 国产精品嫩草影院久久久| 色噜噜狠狠狠综合曰曰曰88av| 性欧美长视频免费观看不卡| 久久精品亚洲精品| 丝袜一区二区三区| 奇门遁甲1982国语版免费观看高清| 久久欧美在线电影| 精品久久久在线观看| 日韩亚洲欧美中文高清在线| 亚洲网址你懂得| 欧美专区第一页| 红桃av永久久久| 8x海外华人永久免费日韩内陆视频| 欧美xxxx18性欧美| 成人激情春色网| 国产日本欧美一区| 国产一区二区激情| 久久视频在线视频| 激情av一区二区| 日韩av网站大全| 清纯唯美亚洲综合| 中文字幕欧美视频在线| 精品国产一区二区三区久久久狼| 亚洲天堂av图片| 久热精品在线视频| 日韩精品在线免费播放| 日韩欧美主播在线| 欧美极品欧美精品欧美视频| 91久久国产婷婷一区二区| 最新国产成人av网站网址麻豆| 国产精品稀缺呦系列在线| 一个人看的www欧美| 欧美激情免费视频| 国语自产精品视频在线看一大j8| 国产精品三级久久久久久电影| 欧美成年人在线观看| 国产精品99久久久久久白浆小说| 粉嫩av一区二区三区免费野| 亚洲精品98久久久久久中文字幕| 欧美另类极品videosbestfree| 亚洲一区亚洲二区| 国产精品爽爽爽| 欧美成aaa人片在线观看蜜臀| 午夜精品蜜臀一区二区三区免费| 78m国产成人精品视频| 91精品国产乱码久久久久久蜜臀| 亚洲国产成人精品久久久国产成人一区| 91精品国产高清久久久久久| 91免费观看网站| 欧美激情手机在线视频| 欧美在线观看一区二区三区| 亚洲精品电影网站| 日本精品在线视频| 欧美性xxxx极品高清hd直播| 日韩精品在线私人| 国产精品都在这里| 色噜噜狠狠狠综合曰曰曰| 国产成人精品免高潮在线观看| 91超碰中文字幕久久精品| 欧美性色视频在线| 国产精品视频白浆免费视频| 亚洲性av网站| 国产一区二区三区视频在线观看| 成人国产精品一区| 亚洲国产精品va在线看黑人动漫| 国语自产精品视频在线看抢先版图片| 在线激情影院一区| 亚洲一级免费视频| 国产97色在线|日韩| 日韩福利伦理影院免费| 日韩av网站在线| 成人精品网站在线观看| 久久亚洲精品中文字幕冲田杏梨| 色中色综合影院手机版在线观看| 中文精品99久久国产香蕉| 国产高清在线不卡| 日韩av在线免费播放| 91网站在线免费观看| 国产精品igao视频| xxxxx成人.com| 欧美一级大胆视频| 免费99精品国产自在在线| 亚洲精品动漫久久久久| 国产偷亚洲偷欧美偷精品| 亚洲字幕一区二区| 国产视频精品一区二区三区| 一区二区欧美日韩视频| 最新国产成人av网站网址麻豆| 国内精品模特av私拍在线观看| 亚洲第一偷拍网| 国产精品夜间视频香蕉| 精品亚洲一区二区三区| 国内免费精品永久在线视频| 久久综合久中文字幕青草| 亚洲国产精品女人久久久| 欧美日韩性生活视频| xxxxx91麻豆| 在线观看视频亚洲| 欧美日韩国产在线播放| 国产精品视频最多的网站| 欧美夫妻性视频| 国产成人久久久精品一区| 高清亚洲成在人网站天堂| 成人黄色av免费在线观看| 91免费福利视频| 亚洲影院色在线观看免费| 夜夜嗨av色综合久久久综合网| 欧美亚洲激情视频| 九色精品免费永久在线| 国产精品高清在线观看| 国产一区二区三区视频在线观看| 26uuu另类亚洲欧美日本一| 色老头一区二区三区在线观看| 国产91色在线播放| www.美女亚洲精品| 在线观看成人黄色| 日韩在线观看免费高清完整版| 国产一区二区三区18| 九九久久国产精品| 日韩在线播放一区| 九九精品在线观看| 啪一啪鲁一鲁2019在线视频|