EventHttp::__construct

(PECL event >= 1.2.6-beta)

EventHttp::__constructConstrói objeto EventHttp (o servidor HTTP)

Descrição

public EventHttp::__construct( EventBase $base , EventSslContext $ctx = null )

Constrói o objeto do servidor HTTP.

Parâmetros

base

Base de eventos associada.

ctx

Objeto da classe EventSslContext. Transforma servidor HTTP simples em servidor HTTPS. Isso significa que se ctx estiver configurado corretamente, os eventos de buffer subjacentes serão baseados em soquetes OpenSSL. Assim, todo o tráfego passará pelo SSL ou TLS.

Nota:

Este parâmetro está disponível somente se Event for compilado com suporte OpenSSL e somente com Libevent 2.1.0-alpha e superior.

Registro de Alterações

Versão Descrição
PECL event 1.9.0 Suporte OpenSSL (ctx) adicionado.

Exemplos

Exemplo #1 Servidor HTTP simples

<?php
/*
* Servidor HTTP simples.
*
* Para testar:
* 1) Execute-o em uma porta de sua escolha, por exemplo:
* $ php examples/http.php 8010
* 2) Em outro terminal, conecte-se a algum endereço nesta porta
* e faça uma solicitação GET ou POST (outras são desativadas aqui), por exemplo:
* $ nc -t 127.0.0.1 8010
* POST /about HTTP/1.0
* Content-Type: text/plain
* Content-Length: 4
* Connection: close
* (pressione Enter)
*
* Resultado:
* 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
* (pressione Enter)
*
* Resultado:
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
* (pressione Enter)
*
* $ nc -t 127.0.0.1 8010
* GET /unknown HTTP/1.0
* Connection: close
*
* Resultado:
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
*
* 3) Veja o que o servidor exibe na janela do terminal anterior.
*/

function _http_dump($req, $data) {
static
$counter = 0;
static
$max_requests = 2;

if (++
$counter >= $max_requests) {
echo
"O contador atingiu o máximo de solicitações $max_requests. Saindo\n";
exit();
}

echo
__METHOD__, " chamado\n";
echo
"requisição:"; var_dump($req);
echo
"dados:"; var_dump($data);

echo
"\n===== DUMP =====\n";
echo
"Comando:", $req->getCommand(), PHP_EOL;
echo
"URI:", $req->getUri(), PHP_EOL;
echo
"Cabeçalhos de entrada:"; var_dump($req->getInputHeaders());
echo
"Cabeçalhos de saída:"; var_dump($req->getOutputHeaders());

echo
"\n >> Enviando resposta ...";
$req->sendReply(200, "OK");
echo
"OK\n";

echo
"\n >> Lendo buffer de entrada ...\n";
$buf = $req->getInputBuffer();
while (
$s = $buf->readLine(EventBuffer::EOL_ANY)) {
echo
$s, PHP_EOL;
}
echo
"Não há mais dados no buffer\n";
}

function
_http_about($req) {
echo
__METHOD__, PHP_EOL;
echo
"URI: ", $req->getUri(), PHP_EOL;
echo
"\n >> Enviando resposta ...";
$req->sendReply(200, "OK");
echo
"OK\n";
}

function
_http_default($req, $data) {
echo
__METHOD__, PHP_EOL;
echo
"URI: ", $req->getUri(), PHP_EOL;
echo
"\n >> Enviando resposta ...";
$req->sendReply(200, "OK");
echo
"OK\n";
}

$port = 8010;
if (
$argc > 1) {
$port = (int) $argv[1];
}
if (
$port <= 0 || $port > 65535) {
exit(
"Porta inválida");
}

$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", "valor de dados personalizados");

$http->bind("0.0.0.0", 8010);
$base->loop();
?>

O exemplo acima produzirá algo semelhante a:

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
(pressione Enter)

HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
0
Bas Vijfwinkel
9 years ago
If you try to use the SSL context parameter and you receive an error that you're using 2 parameters instead of 1, then your libevent library is not recent enough to support all features.
When installing the event extension with PECL, the libevent library needs a certain version to support certain functions.
PECL does not show any errors or warnings but simple disables everything that your libevent version does not support.

For further details see my comment at
http://php.net/manual/en/event.examples.php
up
0
Anonymous
10 years ago
This demo code has a memory leak
To Top