首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EventHttp::__construct

(PECL event >= 1.2.6-beta)

EventHttp :: __ construct - 构造EventHttp对象(HTTP服务器)

描述

代码语言:javascript
复制
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服务器

代码语言:javascript
复制
<?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();
?>

上面的例子会输出:

代码语言:javascript
复制
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 →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com