©
This document uses PHP Chinese website manual Release
(PECL event >= 1.2.6-beta)
EventHttp::__construct — Constructs EventHttp object(the HTTP server)
$base
[, EventSslContext $ctx
= NULL
] )Constructs the HTTP server object.
base
Associated event base.
ctx
EventSslContext
class object. Turns plain HTTP server into HTTPS server. It means that
if
ctx
is configured correctly, then the underlying buffer events will be based
on OpenSSL sockets. Thus, all traffic will pass through the SSL or TLS.
Note:
This parameter is available only if Event is compiled with OpenSSL support and only with Libevent 2.1.0-alpha and higher.
Returns EventHttp object.
版本 | 说明 |
---|---|
1.9.0 |
OpenSSL support (ctx ) added.
|
Example #1 Simple HTTP server
<?php
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: closeHTTP/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
[#1] Bas Vijfwinkel [2015-06-26 09:22:37]
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
[#2] Anonymous [2015-03-06 11:47:42]
This demo code has a memory leak