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

woaidongmao

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

SPWebServer:一個(gè)基于 SPServer 的 web 服務(wù)器框架

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

關(guān)鍵字: C++   libevent spserver http embedded web 服務(wù)器  

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

這里有幾個(gè)原因:

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

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

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

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

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

下面來看一個(gè)使用 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

 

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

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

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

 

posted on 2009-07-13 10:53 肥仔 閱讀(1025) 評論(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>
            一区二区三区视频观看| 午夜国产精品视频免费体验区| 久久色在线观看| 裸体歌舞表演一区二区| 久久人91精品久久久久久不卡| 久久成年人视频| 美女久久一区| 欧美日韩国产限制| 国产精品久久久一本精品| 国产精品第13页| 黄色成人av| 亚洲美女毛片| 午夜欧美大片免费观看 | 国产日韩欧美91| 黄色成人小视频| 日韩午夜中文字幕| 久久大香伊蕉在人线观看热2| 久久躁狠狠躁夜夜爽| 91久久精品国产91性色tv| 999在线观看精品免费不卡网站| 亚洲性图久久| 卡通动漫国产精品| 国产精品高潮呻吟久久| 亚洲二区免费| 欧美亚洲一区| 在线综合欧美| 欧美成人午夜激情在线| 欧美日韩免费观看一区| 国产欧美欧美| 一区二区三区国产| 久久在线免费观看| 亚洲网站视频福利| 欧美.www| 国产一区二区高清不卡| 一区二区三区不卡视频在线观看| 久久精品国产亚洲a| 亚洲免费av片| 欧美成人精品h版在线观看| 国产一区二区精品久久99| 亚洲美女色禁图| 免费成人性网站| 亚洲欧美国产日韩天堂区| 欧美久久久久| 99av国产精品欲麻豆| 快播亚洲色图| 久久9热精品视频| 国产精品最新自拍| 亚洲欧美日韩国产中文| 99成人在线| 欧美日本久久| 99热这里只有成人精品国产| 男女精品网站| 久久全球大尺度高清视频| 国产一区久久| 久久久97精品| 午夜精品久久久久久久| 国产麻豆精品theporn| 性8sex亚洲区入口| 亚洲综合色丁香婷婷六月图片| 欧美日韩中文字幕| 一区二区三区日韩精品视频| 亚洲日本中文字幕| 欧美日韩高清在线| 亚洲一区精彩视频| 午夜精品美女久久久久av福利| 国产精品女主播一区二区三区| 亚洲综合色网站| 亚洲综合日韩中文字幕v在线| 国产精品尤物| 免费亚洲一区二区| 欧美精品日韩一区| 亚洲与欧洲av电影| 亚洲欧美清纯在线制服| 国精品一区二区| 欧美二区不卡| 欧美视频网站| 久久精品在线| 嫩草国产精品入口| 亚洲一区二区成人在线观看| 亚洲一区二区高清| 国精品一区二区三区| 亚洲二区在线| 国产精品影视天天线| 久久亚洲私人国产精品va| 免费成人网www| 午夜天堂精品久久久久| 一本色道久久99精品综合| 亚洲美女av黄| 欧美jizz19性欧美| 91久久久久| 亚洲视频欧美在线| 欧美四级在线观看| 香蕉免费一区二区三区在线观看 | 美脚丝袜一区二区三区在线观看 | 久久综合一区二区| 欧美成人资源| 亚洲午夜精品在线| 国内综合精品午夜久久资源| 欧美激情第三页| 欧美成人午夜剧场免费观看| 欧美日韩精品在线| 亚洲午夜高清视频| 国产一区自拍视频| 欧美日韩成人综合在线一区二区| 亚洲欧美日韩精品久久久| 美女国产一区| 久久精品人人做人人爽电影蜜月| 亚洲精品裸体| 在线观看国产日韩| 欧美午夜电影一区| 欧美激情中文不卡| 免费观看久久久4p| 久久精品国产v日韩v亚洲| 亚洲图片自拍偷拍| 亚洲第一主播视频| 欧美黄色aa电影| 亚洲黄色av一区| 美日韩在线观看| 猛男gaygay欧美视频| 亚洲国产福利在线| 老司机精品导航| 欧美大片一区二区三区| 蜜臀av国产精品久久久久| 久久久久亚洲综合| 欧美激情精品久久久久| 亚洲伦理一区| 小黄鸭精品密入口导航| 久久国产精彩视频| 欧美福利视频在线观看| 欧美精品18+| 国产精品欧美经典| 极品中文字幕一区| 亚洲精品韩国| 亚洲自拍另类| 欧美国产日本韩| 亚洲综合色婷婷| 欧美激情影音先锋| 国产亚洲成av人片在线观看桃| 激情国产一区| 亚洲在线免费视频| 免费观看在线综合色| 亚洲一区二区精品在线| 免费观看日韩av| 国外成人网址| 欧美亚洲网站| 一本色道久久综合亚洲二区三区| 欧美一区二区| 国产精品久久久久久久久久久久久久| 国产农村妇女精品一区二区| 一区二区激情| 91久久精品一区| 久久久久一本一区二区青青蜜月| 欧美日韩卡一卡二| 亚洲精选91| 亚洲黄色视屏| 欧美成人日本| 夜夜精品视频| 亚洲美女诱惑| 国产精品爽爽ⅴa在线观看| 亚洲手机在线| 亚洲一区在线观看视频| 国产精品视频内| 国产精品电影在线观看| 一区二区免费在线播放| 亚洲黄色尤物视频| 欧美日韩在线影院| 欧美一区二区免费观在线| 亚洲自拍啪啪| 亚洲国产精品久久久久秋霞不卡| 欧美/亚洲一区| 欧美日韩在线一二三| 久久―日本道色综合久久| 免费成人小视频| 亚洲综合精品一区二区| 久久九九免费| 亚洲在线免费| 欧美成熟视频| 另类综合日韩欧美亚洲| 欧美精品国产精品日韩精品| 午夜久久影院| 欧美黄色影院| 欧美jjzz| 国产一区二区视频在线观看 | 国产精品久久久久永久免费观看 | 韩国一区二区在线观看| 91久久黄色| 亚洲国产精品一区二区第四页av| 在线视频亚洲| 亚洲免费视频观看| 欧美黄色免费网站| 免费欧美在线视频| 一区二区在线看| 久久动漫亚洲| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产乱码精品一区二区三区忘忧草| 亚洲国产aⅴ天堂久久| 亚洲国产老妈| 欧美精品导航| 亚洲视频一区| 久久久噜噜噜久噜久久|