EventHttp::setCallback

(PECL event >= 1.4.0-beta)

EventHttp::setCallbackDefine una retrollamada para una URI específica

Descripción

public EventHttp::setCallback( string $path , string $cb , string $arg = ?): void

Define una retrollamada para una URI específica.

Parámetros

path

La URI para la cual la retrollamada debe ser invocada.

cb

La retrollamada callable que será invocada durante una petición en la URI path. Debe corresponder al siguiente prototipo:

callback( EventHttpRequest $req = NULL , mixed $arg = NULL ): void

req

Un objeto EventHttpRequest.

arg

Datos personalizados.

arg

Datos personalizados.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo con EventHttp::setCallback()

<?php
/*
* Servidor HTTP simple.
*
* Para probarlo:
* 1) Ejecútelo en el puerto de su elección, i.e. :
* $ php examples/http.php 8010
* 2) En otro terminal, conéctese a una dirección de este puerto
* y realice una petición GET o POST (las otras están desactivadas aquí), i.e.:
* $ nc -t 127.0.0.1 8010
* POST /about HTTP/1.0
* Content-Type: text/plain
* Content-Length: 4
* Connection: close
* (presione Enter)
*
* Debería mostrar:
* a=12
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
*
* 3) Ver lo que muestra el servidor en el terminal anterior.
*/

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();
?>

El resultado del ejemplo sería algo similar a:

a=12
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close

Ver también

  • EventHttp::setDefaultCallback() - Define la función de retrollamada por defecto para manejar las peticiones que no son capturadas por funciones de retrollamada específicas
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top