中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Perl使用nginx FastCGI環境做WEB開發實例
來源:易賢網 閱讀:1279 次 日期:2014-09-25 11:58:59
溫馨提示:易賢網小編為您整理了“Perl使用nginx FastCGI環境做WEB開發實例”,方便廣大網友查閱!

Hello World

一個簡單的hello world例子:

代碼如下:

#!/usr/bin/env perl

use strict;

use warnings;

use CGI::Fast;

while(my $q = new CGI::Fast)

{

print $q->header("text/plain");

print "Hello World";

}

和CGI的區別僅在于多了一個循環來接受請求,CGI::Fast對象和CGI接口是一樣的,而且該腳本也可以當做CGI腳本使用。

搭建nginx + FastCGI 環境

Perl使用CGI::Fast包來提供FastCGI服務,該包提供兩種方式來啟動FastCGI進程,一個是直接使用該包提供的服務將當前進程變為FastCGI進程,另外一個是使用第三方工具spawn-fcgi來啟動。

nginx配置方式例子:

代碼如下:

location / {

fastcgi_pass 127.0.0.1:8184;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

}

配置好nginx后,使用spawn-fcgi來啟動前面的Hello World:

代碼如下:

$ spawn-fcgi -n -a 127.0.0.1 -p 8184 -f ./main.pl

調試支持

在前面的命令行里使用了參數-n,讓spawn-fcgi不要fork出多個進程,并阻塞,允許用戶Ctrl+C來關閉,產品服務器可以去掉這個參數來充分利用服務器的多核來提供更高的并發數。我之前寫了一個bash腳本,允許在文件改動的情況下重啟服務,方便調試perl程序,代碼如下:

代碼如下:

#!/bin/bash

#PID文件和需要啟動的腳本

PID_FILE=service.pid

MAIN=main.pl

#關閉之前啟動的進程

term() {

test -e $PID_FILE || return

pid=`cat $PID_FILE`

kill -s -0 $pid || return

echo "Terminating $MAIN $pid"

rm -f $PID_FILE

kill $pid

wait $pid

}

#當前腳本退出的時候也關閉啟動了的FastCGI進程

trap "term;exit" SIGINT SIGTERM

while true

do

#首次啟動或者文件改動后都需要關閉之前的進程

term

#以no fork方式啟動腳本來調試,并將PID寫入到文件

spawn-fcgi -n -a 127.0.0.1 -p 8184 -f ./$MAIN &

pid=$!

echo $pid > $PID_FILE

echo "My Perl service started, pid = $pid"

#監控文件變化

files=`find . -name '*.pl' -o -name '*.pm' -o -name '*.html'`

md5=`md5sum $files|md5sum`

#wait for file change

while [[ `md5sum $files|md5sum` = "$md5" ]]

do

sleep 1

done

echo "File changes detected, restarting service"

done

該腳本已在Mac OSX和Linux下測試通過

路由系統

做Web開發離不開路由實現,來對不同請求來做出特定的響應。

路由請求依賴HTTP Method和URI兩部分,因此主要就是需要這兩者來做分派。

在CGI中可以通過環境變量REQUEST_METHOD和REQUEST_URI來獲取請求方法和URI。

因此一個簡單的路由系統實際上可以分解為一個二級的map,注冊路由實際上就是往這個map里放入規則對應的處理函數,而分派請求則是從這個map里根據規則獲取對應的處理函數,一個簡單的例子:

代碼如下:

my %routers = ();

sub not_found

{

print "Status: 404\n";

print "Content-Type: text/html\n\n";

print<<EOF

<html>

<body>

<h1>404 Not found</h1>

Cannot find $ENV{REQUEST_PATH}.

</body>

</html>

EOF

}

sub add_rule

{

my ($method, $path, $callback) = @_;

my $handlers = $routers{$method};

$handlers = $routers{$method} = {} if not $handlers;

$handlers->{$path} = $callback;

}

sub dispatch

{

my $q = shift;

my $method = $ENV{REQUEST_METHOD};

my $uri = $ENV{REQUEST_URI};

$uri =~ s/\?.*$//;

my $handler = ($routers{$method} || {})->{$uri} || not_found;

eval

{

&$handler($q);

};

print STDERR "Failed to handle $method $uri: $@\n" if $@;

}

使用這個路由系統的例子:

代碼如下:

sub index

{

my ($q) = @_;

print $q->header('text/plain');

print "Hello World!";

}

router::add_rule('GET', '/', \&index);

模板系統

perl提供了大量的模板系統的實現,我個人最喜歡的是Template Toolkit,文檔也非常豐富,網站是 。

將前面的index修改為使用模板的例子:

代碼如下:

use Template;

my $tt = new Template({INCLUDE_PATH => 'templates', INTERPOLATE => 1});

sub index

{

my ($q) = @_;

my $output = '';

print $q->header('text/html');

$tt->process('index.html', {world => 'World'}, $output) || die $tt->error();

print $output;

}

其中templates/index.html文件內容如下:

代碼如下:

<html>

<head><title>Demo</title></head>

<body>

Hello ${world}

</body>

</html>

完!

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲欧美另类在线| 亚洲一区视频| 欧美一级二级三级蜜桃| 欧美日韩国内| 久久视频一区| 国产亚洲一区二区三区| 性伦欧美刺激片在线观看| 99视频在线精品国自产拍免费观看 | 欧美午夜精品久久久久久孕妇 | 亚洲欧美日韩一区二区在线| 欧美激情精品| 欧美日本在线视频| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲国产欧美精品| 欧美精品少妇一区二区三区| 久久天天躁狠狠躁夜夜av| 亚洲综合大片69999| 免费黄网站欧美| 亚洲三级观看| 99在线热播精品免费99热| 激情婷婷欧美| 六月丁香综合| 欧美成人久久| 欧美精品1区2区3区| 久久精品视频免费播放| 国内精品久久久| 老鸭窝亚洲一区二区三区| 亚洲摸下面视频| 久久久国产精品一区| 欧美成人午夜免费视在线看片| 久久亚洲二区| 黄色日韩精品| 亚洲国产三级网| 国产亚洲一区二区在线观看| 在线电影院国产精品| 亚洲一区二区三区午夜| 久久综合中文字幕| 国产精品美女999| 好看的亚洲午夜视频在线| 一区二区成人精品| 久久免费视频观看| 久久伊人亚洲| 国产精品国产福利国产秒拍| 国产一区二区三区黄| 亚洲精品一区二区在线观看| 久久精品国产精品亚洲综合| 欧美日韩一区二区三区在线 | 国产精品久久久久免费a∨大胸| 久久久久久久久久久久久久一区| 狠狠做深爱婷婷久久综合一区| 欧美成人午夜剧场免费观看| 亚洲视频一区二区| 夜夜狂射影院欧美极品| 国产日韩欧美在线| 一本综合久久| 欧美日韩精品一区二区三区四区| 亚洲欧美日韩一区二区在线| 91久久久精品| 国产综合在线看| 国产精品永久免费观看| 欧美二区在线观看| 亚洲综合色丁香婷婷六月图片| 亚洲欧洲午夜| 樱桃国产成人精品视频| 性一交一乱一区二区洋洋av| 在线观看一区二区视频| 国产精品腿扒开做爽爽爽挤奶网站| 欧美极品aⅴ影院| 久久先锋资源| 久久久久久久综合日本| av成人免费| 日韩午夜剧场| 亚洲精品综合精品自拍| 午夜精品婷婷| 亚洲欧美日韩国产| 国产精品亚洲不卡a| 国产精品久久国产三级国电话系列| 欧美伦理在线观看| 激情综合久久| 影院欧美亚洲| 精品成人一区二区三区四区| 狠狠色香婷婷久久亚洲精品| 国产综合色产在线精品| 欧美日韩综合网| 欧美日韩一区在线观看视频| 欧美日韩中文精品| 国产精品日日摸夜夜添夜夜av | 亚洲永久免费av| 在线一区欧美| 黄色一区二区三区| 亚洲福利视频一区二区| 欧美激情国产日韩精品一区18| 亚洲欧美文学| 亚洲欧美区自拍先锋| 欧美一级精品大片| 久久亚洲一区二区三区四区| 欧美成人精品一区二区| 国产欧美在线观看| 亚洲国产精品999| 中文国产成人精品| 亚洲欧美日韩直播| 欧美精品首页| 国产精品色网| 在线观看亚洲视频啊啊啊啊| 欧美日韩中文字幕日韩欧美| 在线观看日韩av电影| 亚洲自拍偷拍麻豆| 欧美日韩免费网站| 亚洲精品一区二区网址| 老司机精品视频网站| 国产精品永久免费| 99精品免费网| 欧美激情视频一区二区三区在线播放| 国产欧美在线视频| 亚洲综合第一页| 欧美精品一区二区三区四区| 亚洲国产精品传媒在线观看| 久久精品国产欧美激情| 国产精品视频免费一区| 亚洲视频电影在线| 欧美日韩在线第一页| 亚洲精品日产精品乱码不卡| 欧美成人精品1314www| 精品999成人| 久久综合久色欧美综合狠狠| 狠狠爱综合网| 在线观看亚洲| 久久久久久高潮国产精品视| 国产欧美日韩精品专区| 亚洲一区在线播放| 国产精品视频99| 亚洲综合日韩在线| 国产精品黄色| 亚洲永久在线| 国产精品激情| 亚洲女ⅴideoshd黑人| 国产精品久久久久久超碰| 亚洲一区二区在线免费观看| 欧美三日本三级三级在线播放| 夜夜嗨一区二区| 国产精品久久99| 香蕉精品999视频一区二区| 国产日韩欧美在线播放不卡| 久久精精品视频| 亚洲高清自拍| 欧美另类99xxxxx| 在线一区二区日韩| 国产欧美日韩一级| 欧美中文字幕第一页| 在线观看视频免费一区二区三区| 久久性天堂网| 一片黄亚洲嫩模| 国产精品美女www爽爽爽| 久久精品国产99| 亚洲国产精品热久久| 欧美视频免费| 久久精品中文字幕免费mv| 亚洲国产精品久久久久婷婷884 | 欧美日韩精品系列| 欧美一区二区三区四区夜夜大片 | 欧美在线看片a免费观看| 黄色小说综合网站| 欧美日韩影院| 久久久精品网| 一区二区三区欧美在线观看| 国产亚洲激情视频在线| 欧美久久久久中文字幕| 欧美在线播放一区| 一区二区黄色| 在线日韩视频| 国产精品综合久久久| 欧美 日韩 国产精品免费观看| 亚洲天堂视频在线观看| 亚洲国产成人高清精品| 国产麻豆精品theporn| 欧美日本网站| 乱码第一页成人| 亚洲一区区二区| 亚洲国产欧美另类丝袜| 国产精品一区二区三区久久| 欧美激情麻豆| 久久久久高清| 亚洲中午字幕| 99精品国产福利在线观看免费| 国产欧美日韩伦理| 欧美日韩1区2区| 看欧美日韩国产| 性久久久久久久久久久久| 日韩写真视频在线观看| 一区二区三区在线免费视频| 国产麻豆午夜三级精品| 欧美视频第二页| 欧美国内亚洲| 久久亚洲影音av资源网| 久久久久久香蕉网| 久久精品网址| 欧美在线二区| 午夜精品福利在线| 亚洲一区二区三区国产| 一个色综合导航|