EventHttp::__construct
(PECL event >= 1.2.6-beta)
EventHttp :: __ construct - 构造EventHttp对象(HTTP服务器)
描述
public EventHttp::__construct ( EventBase $base [, EventSslContext $ctx = NULL ] )
构造HTTP服务器对象。
参数
base
相关的事件库。
ctx
EventSslContext类对象。将纯HTTP服务器转换为HTTPS服务器。这意味着如果ctx
配置正确,则基础缓冲区事件将基于OpenSSL套接字。因此,所有流量都将通过SSL或TLS。
注意:只有在使用OpenSSL支持编译Event并且仅使用Libevent 2.1.0-alpha及更高版本时,此参数才可用。
返回值
返回EventHttp对象。
更新日志
版本 | 描述 |
---|---|
1.9.0 | 增加了OpenSSL支持(ctx)。 |
例
示例#1简单的HTTP服务器
<?php
/*
?*?Simple?HTTP?server.
?*
?*?To?test?it:
?*?1)?Run?it?on?a?port?of?your?choice,?e.g.:
?*?$?php?examples/http.php?8010
?*?2)?In?another?terminal?connect?to?some?address?on?this?port
?*?and?make?GET?or?POST?request(others?are?turned?off?here),?e.g.:
?*?$?nc?-t?127.0.0.1?8010
?*?POST?/about?HTTP/1.0
?*?Content-Type:?text/plain
?*?Content-Length:?4
?*?Connection:?close
?*?(press?Enter)
?*
?*?It?will?output
?*?a=12
?*?HTTP/1.0?200?OK
?*?Content-Type:?text/html;?charset=ISO-8859-1
?*?Connection:?close
?*
?*?$?nc?-t?127.0.0.1?8010
?*?GET?/dump?HTTP/1.0
?*?Content-Type:?text/plain
?*?Content-Encoding:?UTF-8
?*?Connection:?close
?*?(press?Enter)
?*
?*?It?will?output:
?*?HTTP/1.0?200?OK
?*?Content-Type:?text/html;?charset=ISO-8859-1
?*?Connection:?close
?*?(press?Enter)
?*
?*?$?nc?-t?127.0.0.1?8010
?*?GET?/unknown?HTTP/1.0
?*?Connection:?close
?*
?*?It?will?output:
?*?HTTP/1.0?200?OK
?*?Content-Type:?text/html;?charset=ISO-8859-1
?*?Connection:?close
?*
?*?3)?See?what?the?server?outputs?on?the?previous?terminal?window.
?*/
function?_http_dump($req,?$data)?{
????static?$counter??????=?0;
????static?$max_requests?=?2;
????if?(++$counter?>=?$max_requests)??{
????????echo?"Counter?reached?max?requests?$max_requests.?Exiting\n";
????????exit();
????}
????echo?__METHOD__,?"?called\n";
????echo?"request:";?var_dump($req);
????echo?"data:";?var_dump($data);
????echo?"\n=====?DUMP?=====\n";
????echo?"Command:",?$req->getCommand(),?PHP_EOL;
????echo?"URI:",?$req->getUri(),?PHP_EOL;
????echo?"Input?headers:";?var_dump($req->getInputHeaders());
????echo?"Output?headers:";?var_dump($req->getOutputHeaders());
????echo?"\n?>>?Sending?reply?...";
????$req->sendReply(200,?"OK");
????echo?"OK\n";
????echo?"\n?>>?Reading?input?buffer?...\n";
????$buf?=?$req->getInputBuffer();
????while?($s?=?$buf->readLine(EventBuffer::EOL_ANY))?{
????????echo?$s,?PHP_EOL;
????}
????echo?"No?more?data?in?the?buffer\n";
}
function?_http_about($req)?{
????echo?__METHOD__,?PHP_EOL;
????echo?"URI:?",?$req->getUri(),?PHP_EOL;
????echo?"\n?>>?Sending?reply?...";
????$req->sendReply(200,?"OK");
????echo?"OK\n";
}
function?_http_default($req,?$data)?{
????echo?__METHOD__,?PHP_EOL;
????echo?"URI:?",?$req->getUri(),?PHP_EOL;
????echo?"\n?>>?Sending?reply?...";
????$req->sendReply(200,?"OK");
????echo?"OK\n";
}
$port?=?8010;
if?($argc?>?1)?{
????$port?=?(int)?$argv[1];
}
if?($port?<=?0?||?$port?>?65535)?{
????exit("Invalid?port");
}
$base?=?new?EventBase();
$http?=?new?EventHttp($base);
$http->setAllowedMethods(EventHttpRequest::CMD_GET?|?EventHttpRequest::CMD_POST);
$http->setCallback("/dump",?"_http_dump",?array(4,?8));
$http->setCallback("/about",?"_http_about");
$http->setDefaultCallback("_http_default",?"custom?data?value");
$http->bind("0.0.0.0",?8010);
$base->loop();
?>
上面的例子会输出:
a=12
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
(press Enter)
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
← EventHttp::bind
EventHttp::removeServerAlias →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com