文字

EventHttp::accept

(PECL event >= 1.2.6-beta)

EventHttp::acceptMakes an HTTP server accept connections on the specified socket stream or resource

说明

public bool EventHttp::accept ( mixed $socket )

Makes an HTTP server accept connections on the specified socket stream or resource. The socket should be ready to accept connections.

Can be called multiple times to accept connections on different sockets.

Note:

To bind a socket, listen , and accept connections on the socket in s single call use EventHttp::bind() . EventHttp::accept() is needed only if one already has a socket ready to accept connections.

参数

socket

Socket resource, stream or numeric file descriptor representing a socket ready to accept connections.

返回值

Returns TRUE on success. Otherwise FALSE .

范例

Example #1 EventHttp::accept() example

<?php
$base 
= new  EventBase ();
$http  = new  EventHttp ( $base );

$addresses  = array (
     
8091  =>  "127.0.0.1" ,
     
8092  =>  "127.0.0.2" ,
);
$i  0 ;

$socket  = array();

foreach (
$addresses  as  $port  =>  $ip ) {
    echo 
$ip " " $port PHP_EOL ;
    
$socket [ $i ] =  socket_create ( AF_INET SOCK_STREAM SOL_TCP );
    if (!
socket_bind ( $socket [ $i ],  $ip $port )) {
        exit(
"socket_bind failed\n" );
    }
    
socket_listen ( $socket [ $i ],  0 );
    
socket_set_nonblock ( $socket [ $i ]);

    if (!
$http -> accept ( $socket [ $i ])) {
        echo 
"Accept failed\n" ;
        exit(
1 );
    }

    ++
$i ;
}

$http -> setCallback ( "/some-page" , function() {
 echo 
"(some-page)\n" ;
    echo 
"URI: " $req -> getUri (),  PHP_EOL ;
    
$req -> sendReply ( 200 "OK" );
    echo 
"OK\n" ;
});

$http -> setDefaultCallback (function( $req ) {
    echo 
"URI: " $req -> getUri (),  PHP_EOL ;
    
$req -> sendReply ( 200 "OK" );
    echo 
"OK\n" ;
});

$signal  Event :: signal ( $base SIGINT , function () use ( $base ) {
    echo 
"Caught SIGINT. Stopping...\n" ;
    
$base -> stop ();
});
$signal -> add ();

$base -> dispatch ();
echo 
"END\n" ;
// We didn't close sockets, since Libevent already sets
// CLOSE_ON_FREE and CLOSE_ON_EXEC flags on the file 
// descriptor associated with the sockets.
?>

以上例程的输出类似于:

Client:
$ nc 127.0.0.1 8091
GET /about HTTP/1.0
Connection: closeHTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: closeServer:
127.0.0.1 8091
127.0.0.2 8092
URI: /about
OK

参见

  • EventHttp::bind() - Binds an HTTP server on the specified address and port
上一篇: 下一篇: