青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

SPWebServer:一個基于 SPServer 的 web 服務器框架

fromhttp://iunknown.javaeye.com/blog/78561

關鍵字: C++   libevent spserver http embedded web 服務器  

看到這個題目,估計很多人會問:為什么要再實現(xiàn)一個 web 服務器?

這里有幾個原因:

1.這是一個 web 服務器框架,不是一個完整的 web 服務器。也就是說 SPWebServer 提供的是一套 API 和類庫,可以方便地集成到現(xiàn)有的應用程序中。可以稱 SPWebServer embedded web server 。

2.有些時候,我們需要的不是一個功能強大完整的 web 服務器(例如 apache ),我們只是需要一個能提供最基本的 http 功能的服務器框架。比如要用 C/C++ 實現(xiàn) XML-RPC,JSON-RPC 服務器端,或者為 jabberd 實現(xiàn)一個 http bind 的時候。這些場景下,也可以使用 apache,但是使用 embedded web server 可以簡化配置。

3.在如下的場合中,apache 顯得不合適,而 embedded web server 卻正好合適:在一個現(xiàn)有的應用程序中,用 http 接口來提供一些簡單的控制和統(tǒng)計功能。

基于以上原因,也為了
1.
豐富 SPServer 項目(請參考: SPServer : 一個基于 Half-Sync/Half-Async 模式的高并發(fā) server 框架)的功能;
2.
正好作為 SPServer 框架的一個比較好的示范例子;
因此基于 SPServer 框架實現(xiàn)了一個 web 服務器框架。

源代碼下載:
http://spserver.googlecode.com/files/spserver-0.5.src.tar.gz
http://code.google.com/p/spserver/downloads/list

下面來看一個使用 SPWebServer 的簡單例子。

 

clip_image001clip_image002class SP_HttpEchoHandler : public SP_HttpHandler clip_image003{  
clip_image004
public:  
clip_image005clip_image006    SP_HttpEchoHandler()clip_image003{}  
clip_image005clip_image006   
virtual ~SP_HttpEchoHandler()clip_image003{}  
clip_image004 
clip_image005clip_image006   
virtual void handle( SP_HttpRequest * request, SP_HttpResponse * response ) clip_image003{  
clip_image004        response->setStatusCode( 200 );  
clip_image004        response->appendContent( "<html><head>"  
clip_image004            "<title>Welcome to simple http</title>"  
clip_image004            "</head><body>" );  
clip_image004 
clip_image005clip_image006       
char buffer[ 512 ] = clip_image003{ 0 };  
clip_image004        snprintf( buffer,
sizeof( buffer ),  
clip_image004            "<p>The requested URI is : %s.</p>", request->getURI() );  
clip_image004        response->appendContent( buffer );  
clip_image004 
clip_image004        snprintf( buffer,
sizeof( buffer ),  
clip_image004            "<p>Client IP is : %s.</p>", request->getClientIP() );  
clip_image004        response->appendContent( buffer );  
clip_image004 
clip_image005clip_image006       
for( int i = 0; i < request->getParamCount(); i++ ) clip_image003{  
clip_image004            snprintf( buffer,
sizeof( buffer ),  
clip_image004                "<p>Param - %s = %s<p>", request->getParamName( i ),  
clip_image004                request->getParamValue( i ) );  
clip_image004            response->appendContent( buffer );  
clip_image007        }
         
clip_image004 
clip_image005clip_image006       
for( int i = 0; i < request->getHeaderCount(); i++ ) clip_image003{  
clip_image004            snprintf( buffer,
sizeof( buffer ),  
clip_image004                "<p>Header - %s: %s<p>", request->getHeaderName( i ),  
clip_image004                request->getHeaderValue( i ) );  
clip_image004            response->appendContent( buffer );  
clip_image007        }
         
clip_image004 
clip_image005clip_image006       
if( NULL != request->getContent() ) clip_image003{  
clip_image004            response->appendContent( "<p>" );  
clip_image004            response->appendContent( request->getContent(),  
clip_image004                request->getContentLength() );  
clip_image004            response->appendContent( "</p>" );  
clip_image007        }
         
clip_image004 
clip_image004        response->appendContent( "</body></html>\n" );  
clip_image007    }
     
clip_image008}
;  
clip_image009 
clip_image001clip_image002
class SP_HttpEchoHandlerFactory : public SP_HttpHandlerFactory clip_image003{  
clip_image004
public:  
clip_image005clip_image006    SP_HttpEchoHandlerFactory()clip_image003{}  
clip_image005clip_image006   
virtual ~SP_HttpEchoHandlerFactory()clip_image003{}  
clip_image004 
clip_image005clip_image006   
virtual SP_HttpHandler * create() const clip_image003{  
clip_image004       
return new SP_HttpEchoHandler();  
clip_image007    }
  
clip_image008}
;  
clip_image009 
clip_image009
//---------------------------------------------------------  
clip_image009
 
clip_image009
int main( int argc, char * argv[] )  
clip_image001clip_image002
clip_image003{  
clip_image004   
int port = 8080;  
clip_image004 
clip_image004    SP_Server server( "", port,  
clip_image004       
new SP_HttpHandlerAdapterFactory( new SP_HttpEchoHandlerFactory() ) );  
clip_image004 
clip_image004    server.runForever();  
clip_image004 
clip_image004   
return 0;  
clip_image008}
  
clip_image009

 

上面的代碼演示的是一個 http echo server ,即把 client 發(fā)過來的請求信息顯示在頁面上。

在最簡單的情況下,使用 SPWebServer 需要實現(xiàn)兩個類:SP_HttpHandler 的子類 和 SP_HttpHandlerFactory 的子類。
SP_HttpHandler
的子類負責處理具體的 http 請求。
SP_HttpHandlerFactory
的子類協(xié)助 spserver 為每一個連接創(chuàng)建一個 SP_HttpHandler 子類實例。

在實現(xiàn)過程中,使用了 Adapter 模式,把 SP_HttpHandler SP_HttpHandlerFactory 適配為 SP_Handler SP_HandlerAdapterFactory。這兩個 Adapter 都已經(jīng)實現(xiàn),不需要使用者來實現(xiàn)。

 

posted on 2009-07-13 10:53 肥仔 閱讀(1028) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区日韩精品| 欧美一区二区三区四区视频| 狠狠综合久久av一区二区小说| 欧美日韩一区二区免费视频| 久热这里只精品99re8久| 麻豆国产精品777777在线| 免费在线观看精品| 欧美日韩成人综合在线一区二区| 欧美日本中文字幕| 国产日韩精品在线播放| 一区二区三区在线看| 亚洲人屁股眼子交8| 亚洲一二三区在线观看| 久久久久九九视频| 亚洲精品在线电影| 欧美亚洲一区二区在线观看| 免费在线观看成人av| 国产精品美女在线观看| 激情视频一区二区| 亚洲一级黄色av| 美女任你摸久久| 亚洲午夜精品| 欧美高清在线精品一区| 国产欧美高清| 一区二区三区四区国产| 久久久www| av成人国产| 毛片一区二区| 国内精品久久久久久久97牛牛| 99热在这里有精品免费| 久久久成人网| 一区二区三区产品免费精品久久75| 欧美伊人久久久久久久久影院 | 亚洲国产欧美精品| 亚洲五月婷婷| 亚洲国产精品电影在线观看| 亚洲社区在线观看| 欧美激情中文不卡| 激情欧美国产欧美| 久久爱91午夜羞羞| 亚洲一级片在线看| 国产精品国产三级国产普通话蜜臀| 亚洲国产成人porn| 久久综合色影院| 欧美一级理论性理论a| 国产精品久久久久秋霞鲁丝| 9国产精品视频| 亚洲第一成人在线| 久久亚洲欧洲| 伊人婷婷欧美激情| 美女999久久久精品视频| 欧美一区国产在线| 国产一区二区三区四区五区美女| 亚洲欧美亚洲| 亚洲免费网站| 国产伦精品一区二区三区在线观看| 久久精品30| 国产欧美日韩| 亚洲欧美日韩综合| 中日韩美女免费视频网址在线观看| 欧美激情欧美激情在线五月| 亚洲久久在线| 日韩午夜免费| 欧美亚洲免费| 宅男噜噜噜66国产日韩在线观看| 午夜精品短视频| 亚洲一区二区欧美| 欧美黑人国产人伦爽爽爽| 久久综合99re88久久爱| 国产噜噜噜噜噜久久久久久久久| 亚洲韩日在线| 亚洲国产精品悠悠久久琪琪 | 欧美日韩国产一区精品一区| 老司机亚洲精品| 国产一区二区精品久久91| 中文精品视频| 亚洲在线视频| 欧美视频在线看| 亚洲狼人综合| 99精品国产在热久久婷婷| 老巨人导航500精品| 久久亚洲风情| 黑人巨大精品欧美一区二区| 亚洲欧美久久久久一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久日韩精品| 国产一区二区在线免费观看| 亚洲视频一区在线| 在线中文字幕一区| 欧美日韩国产999| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲精品日韩在线观看| 美女精品在线| 亚洲国产精品久久精品怡红院| 亚洲黄一区二区| 欧美成人免费在线视频| 91久久亚洲| 一区二区三区.www| 欧美三区在线| 亚洲男女自偷自拍图片另类| 先锋影音网一区二区| 国产精品入口日韩视频大尺度| 亚洲影音先锋| 久久香蕉国产线看观看av| 一区二区三区在线观看视频| 久久一区二区三区四区五区| 亚洲第一毛片| 亚洲一区二区三区高清| 国产乱码精品一区二区三| 欧美专区日韩专区| 亚洲高清在线精品| 亚洲一区二区在线观看视频| 国产乱码精品一区二区三区五月婷| 性色一区二区三区| 久久精品1区| 一区二区在线观看视频| 免费中文日韩| 亚洲无吗在线| 久久这里有精品15一区二区三区| 亚洲第一在线综合在线| 欧美激情综合色综合啪啪| 国产精品99久久久久久人 | 日韩亚洲欧美一区| 久久国产精品久久久| 在线电影欧美日韩一区二区私密| 欧美大成色www永久网站婷| 中国成人在线视频| 蜜臀久久99精品久久久画质超高清| 亚洲精品一区在线观看| 国产精品美女久久久浪潮软件| 久久精品视频播放| 亚洲最新在线| 欧美成人dvd在线视频| 亚洲欧美另类中文字幕| 激情小说另类小说亚洲欧美| 欧美日韩国产123区| 久久久久se| 亚洲午夜精品视频| 亚洲国产成人精品女人久久久 | 欧美在线视屏| 亚洲精品婷婷| 美女在线一区二区| 午夜激情一区| 一区二区三区色| 91久久午夜| 国产亚洲成精品久久| 欧美日韩精品不卡| 美女视频黄 久久| 欧美一区二区三区在线看| 一本久道综合久久精品| 亚洲动漫精品| 麻豆91精品| 久久青草久久| 欧美自拍偷拍| 欧美一级精品大片| 亚洲一区高清| 亚洲无线一线二线三线区别av| 亚洲经典在线| 亚洲国产乱码最新视频| 在线观看中文字幕不卡| 国产一区二区三区免费在线观看| 欧美日韩亚洲网| 欧美伦理91i| 欧美—级在线免费片| 欧美aⅴ99久久黑人专区| 久久免费精品视频| 久久久国产精品一区二区三区| 午夜国产欧美理论在线播放 | 国产精品永久免费观看| 欧美日韩综合| 欧美深夜影院| 欧美日韩在线不卡| 欧美午夜在线观看| 欧美亚男人的天堂| 国产精品扒开腿做爽爽爽视频 | 黄色成人av在线| 国产一区二区在线观看免费| 国产伦精品一区二区三| 国产精品久久国产精麻豆99网站| 欧美午夜精品久久久久免费视| 欧美日韩国产区一| 欧美性一区二区| 国产九九视频一区二区三区| 国产午夜精品久久久| 国产有码在线一区二区视频| 国产一区日韩欧美| 亚洲国产成人精品女人久久久| 亚洲国产欧美日韩精品| 日韩视频免费观看| 亚洲淫性视频| 久久视频在线视频| 亚洲第一精品电影| 日韩天天综合| 午夜精品999| 久久综合999| 欧美日韩精品中文字幕| 国产精品一区二区在线观看| 国内精品嫩模av私拍在线观看 | 亚洲精品视频在线看| 一区二区三区蜜桃网|