亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 請教 modcgi modperl fastcgi 運行原理 [打印本頁]

作者: hitsubunnu    時間: 2009-09-17 12:04
標題: 請教 modcgi modperl fastcgi 運行原理
很多文章介紹  modcgi modperl fastcgi 但是都只簡單提到 跟cgi的比較 不用每次打開一個進程 具體的原理都說的很含糊

希望哪位能給糾正一下理解上的錯誤

我現(xiàn)在的理解如下

原理:
  1. modcgi 使用 registry 方式  相比cgi減少每次 引導和編譯的開銷
  2. modperl 使用 handler 方式 底層是xs的 所以 比 modcgi更快

    apache喚醒 modcgi 和 modperl的方式是基本一樣的

    客戶1 -> 創(chuàng)建httpd進程 -> modcgi or modperl) -> httpd 掛起
    客戶2 -> 喚醒 客戶1產生的 httpd + mod(cgi perl) -> httpd 掛起
   
  3. fastcgi是個進程池
  
      客戶1 -> httpd 進程池  
                                          -> 有http進程-> 處理cgi -> httpd 掛起
      客戶2 -> httpd 進程池


使用:
   1. modcgi 就是普通的cgi加上 ModPerl::Registry 或 ModPerl:erlRun   (cgi程序要避免閉包等問題)
      http.conf 的設置 使用
        PerlResponseHandler ModPerl::Registry
      
   2. modperl 一般使用模板 catalsyt mason 等 或者自己實現(xiàn)
       http.conf 的設置 使用
          catalsyt :PerlResponseHandler mysite
          mason  : PerlHandler  HTML::Mason::ApacheHandler
          自己實現(xiàn) :PerlResponseHandler Apache2::mysite  

   3. FCGI::Engine 等
作者: hotsnow    時間: 2009-09-18 08:30
fastcgi 應該是基于線程的吧
作者: hitsubunnu    時間: 2009-09-18 09:40
原帖由 hotsnow 于 2009-9-18 08:30 發(fā)表
fastcgi 應該是基于線程的吧


請您不要誤導我


  1. FastCGI 應用程序將處理 HTTP 請求,每個應用程序都由進程池集合組成。在池中,每個進程一次處理一個請求,處理完畢后返回池中,直至其收到另一個請求。
復制代碼


出處  http://technet.microsoft.com/zh- ... 072%28WS.10%29.aspx
作者: 蘭花仙子    時間: 2009-09-18 12:06
perl的fastcgi實現(xiàn)較差,我看過一個別人的代碼,就是一個永久循環(huán)駐留在apache進程里。
modperl與cgi相比,其實也只是節(jié)省了perl腳本Load和compile的開銷。
當然,modperl的handler可以直接訪問apache的內部API,效率比CGI高,也可以做一些CGI不能做的事,例如rewrite請求。
作者: hitsubunnu    時間: 2009-09-18 12:19
原帖由 蘭花仙子 于 2009-9-18 12:06 發(fā)表
其實也只是節(jié)省了perl腳本Load和compile的開銷。


能展開詳細講講 怎么節(jié)省的開銷嗎?

尤其是compile的開銷怎么節(jié)省的

[ 本帖最后由 hitsubunnu 于 2009-9-18 12:20 編輯 ]
作者: 蘭花仙子    時間: 2009-09-18 12:23
原帖由 hitsubunnu 于 2009-9-18 12:19 發(fā)表


能展開詳細講講 怎么節(jié)省的開銷嗎?

尤其是compile的開銷怎么節(jié)省的


modperl只會load腳本一次,然后compile一次,就常駐內存運行,類似于一個daemon,直到這個進程退出。
CGI在每次request過來時,都會從磁盤load腳本并compile。
modperl相對于CGI,節(jié)省了每次編譯的開銷。我說的是這個意思。
作者: hitsubunnu    時間: 2009-09-18 13:01

  1. 1. modcgi 就是使用 registry 方式的modperl
  2. 2. modperl 就是使用 handler 方式 的modperl  

  3.     apache喚醒 modcgi 和 modperl的方式是基本一樣的  但是 handler 方式 底層是xs的 所以 比  registry 方式更快

復制代碼


可以這樣理解嗎?
作者: 蘭花仙子    時間: 2009-09-18 13:55
原帖由 hitsubunnu 于 2009-9-18 13:01 發(fā)表

1. modcgi 就是使用 registry 方式的modperl
2. modperl 就是使用 handler 方式 的modperl  

    apache喚醒 modcgi 和 modperl的方式是基本一樣的  但是 handler 方式 底層是xs的 所以 比  registry 方 ...


sorry,我search了下CPAN,沒發(fā)現(xiàn)modcgi呀。。。
你是指Apache的mod_cgi?還是就是指CGI?

CGI與modperl Registry在實現(xiàn)方式上沒什么區(qū)別,因為Registry本就是用來跑CGI的。
CGI與標準mod_perl最大的區(qū)別在于執(zhí)行的HTTP階段不同。
mod_perl可以執(zhí)行在HTTP的任何階段(一個請求處理可以分成N個階段)。
但是到CGI時,已經很晚了。而且給CGI傳參是通過環(huán)境變量的方式,比較低效。
作者: hitsubunnu    時間: 2009-09-18 16:33
不好意思 我就是因為看的資料很雜 我自己拼接在一起的 所以對modperl的運行機制很混亂才發(fā)問的

蘭花仙子的意思可以理解為下面這樣嗎?
   雖然我在http.conf 里 配置成了 PerlResponseHandler ModPerl::Registry這種形式  但是我在寫程序時仍使用use CGI模塊等寫出的程序  其實質就是最原始的cgi程序 不會對 Load和compile的開銷起任何作用

我的理解(勞煩您糾正)
modperl最常見的有2種形態(tài):handler和registry

1. 我以為很多地方提到的modcgi就是指  運行在 modperl的registry形式下的 用use CGI模塊等寫出的程序  http.conf 的設置時 使用 PerlResponseHandler ModPerl::Registry  寫法上跟普通cgi基本一樣但是需要避免一些閉包等等。。  這種形式跟最原始的cgi是有區(qū)別的 也是可以節(jié)省了perl腳本Load和compile的開銷    一般原始cgi要想移植到modperl下 都采用這種模式

2. handler是比registry更高級的一個層次 是利用apache的底層進行開發(fā) 可以在http的12階段實現(xiàn)任何事情但是很復雜  一般都是使用 catalyst mason 等  在http.conf里設置成 PerlHandler  HTML::Mason::ApacheHandler
這種形式     當然也可以自己編寫 類似 Apache2::Hello 但是自己編寫比較麻煩

如果您看不懂我的表述 或者我的理解有很大的偏差 請幫忙回答2個問題
  1. 最原始的cgi要想 移植到 modperl下 是通過 ModPerl::Registry  嗎 當然要按照規(guī)范寫   這種移植性能上有提升嗎?
  2.registry 和 handler 的區(qū)別 ?

[ 本帖最后由 hitsubunnu 于 2009-9-18 16:35 編輯 ]
作者: billypeng    時間: 2009-09-18 16:51
apache那么復雜的配置,搞懂它都不容易。

直接使用lighttpd + fastcgi,我覺得又簡單又方便,功能和功能都能滿足要求。
作者: 蘭花仙子    時間: 2009-09-18 16:55
1. 最原始的cgi要想 移植到 modperl下 是通過 ModPerl::Registry  嗎 當然要按照規(guī)范寫   這種移植性能上有提升嗎?
  2.registry 和 handler 的區(qū)別 ?


1. 是通過ModPerl::Registry。不過說實話,我這樣寫的經驗很少。性能提升是肯定的,因為CGI也是只load和compile一次,然后就常駐內存運行。
2. CGI與Apache的交互是通過$q ($q=CGI->new)來實現(xiàn)的,其實是訪問環(huán)境變量。modperl是通過$r來交互的,$r你應該清楚了吧,它包含apache的一切內部API。Registry是封裝了CGI的modperl,數(shù)據(jù)傳送應該是apache -> registry -> CGI這種方式,內部細節(jié)具體是怎么樣的,坦白說我也不是很清楚。

一般用modperl的,確實都會使用某種模板。我過去一直用Mason,它就是為modperl而生的。

mod_perl作為開源開發(fā)工具,缺少有實力的廠商支持,框架少,概念復雜,代碼可移植性和維護性都差,我認為它前途不怎么樣,不比JAVA。
但是,modperl比JAVA快,這是不爭的事實。而且modperl比java強大,比如開發(fā)一個響應Filter,modperl可以加入任何HTTP頭部,而Java只能加入有限的幾個頭部。
作者: hitsubunnu    時間: 2009-09-18 17:19
非常感謝  這些問題困惑了我很久  一直沒辦法印證

在ModPerl::Registry 下為了減少編寫語法上的麻煩 我都將成程序按照mvc劃分 然后把所有東西都寫成模塊 通過幾個入口調用 c部分模塊 再調用mv的模塊

條件允許的話 我更喜歡用mason 或者 catalyst  

不是特殊情況很少去使用$r 編寫底層的東西   modperl實在是太復雜了  

再次表示感謝
作者: 蘭花仙子    時間: 2009-09-18 17:28
原帖由 hitsubunnu 于 2009-9-18 17:19 發(fā)表
非常感謝  這些問題困惑了我很久  一直沒辦法印證

在ModPerl::Registry 下為了減少編寫語法上的麻煩 我都將成程序按照mvc劃分 然后把所有東西都寫成模塊 通過幾個入口調用 c部分模塊 再調用mv的模塊

條 ...


沒用過catalyst, 裝都沒裝好過,
modperl缺乏好用易用的框架,這也是我對MP開發(fā)不太看好的原因。
為什么不像Java或Python呢,WEB框架一抓就一堆。

anyway welcome交流。
作者: hitsubunnu    時間: 2009-09-18 17:53
看看這個最前衛(wèi)的框架 http://www.perlfoundation.org/il ... ramework_for_perl_6
作者: 蘭花仙子    時間: 2009-09-18 18:14
原帖由 hitsubunnu 于 2009-9-18 17:53 發(fā)表
看看這個最前衛(wèi)的框架 http://www.perlfoundation.org/il ... ramework_for_perl_6


perl6。。遙遙無期啊。
不知Perl6下還有沒有mod_perl?
如果用虛擬機的話,豈非跟java一樣?
把web服務器port在虛擬機里,就跟java一樣了。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2