文字

范例

Example #1 polling STDIN using basic API

<?php

function  print_line ( $fd $events $arg )
{
    static 
$max_requests  0 ;

    
$max_requests ++;

    if (
$max_requests  ==  10 ) {
        
// exit loop after 10 writes
        
event_base_loopexit ( $arg [ 1 ]);
    }

    
// print the line
    
echo   fgets ( $fd );
}

// create base and event
$base  event_base_new ();
$event  event_new ();

$fd  STDIN ;

// set event flags
event_set ( $event $fd EV_READ  EV_PERSIST "print_line" , array( $event $base ));
// set event base
event_base_set ( $event $base );

// enable event
event_add ( $event );
// start event loop
event_base_loop ( $base );

?>

Example #2 polling STDIN using buffered event API

<?php

function  print_line ( $buf $arg )
{
    static 
$max_requests ;

    
$max_requests ++;

    if (
$max_requests  ==  10 ) {
        
event_base_loopexit ( $arg );
    }

    
// print the line
    
echo  event_buffer_read ( $buf 4096 );
}

function 
error_func ( $buf $what $arg )
{
    
// handle errors
}

$base  event_base_new ();
$eb  event_buffer_new ( STDIN "print_line" NULL "error_func" $base );

event_buffer_base_set ( $eb $base );
event_buffer_enable ( $eb EV_READ );

event_base_loop ( $base );

?>

用户评论:

[#1] Alexis [2010-07-29 05:23:13]

Server example:
<?php
$socket 
stream_socket_server ('tcp://0.0.0.0:2000'$errno$errstr);
stream_set_blocking($socket0);
$base event_base_new();
$event event_new();
event_set($event$socketEV_READ EV_PERSIST'ev_accept'$base);
event_base_set($event$base);
event_add($event);
event_base_loop($base);

$GLOBALS['connections'] = array();
$GLOBALS['buffers'] = array();

function 
ev_accept($socket$flag$base) {
    static 
$id 0;
    
    
$connection stream_socket_accept($socket);
    
stream_set_blocking($connection0);
    
    
$id += 1;
    
    
$buffer event_buffer_new($connection'ev_read'NULL'ev_error'$id);
    
event_buffer_base_set($buffer$base);
    
event_buffer_timeout_set($buffer3030);
    
event_buffer_watermark_set($bufferEV_READ00xffffff);
    
event_buffer_priority_set($buffer10);
    
event_buffer_enable($bufferEV_READ EV_PERSIST);
    
    
// we need to save both buffer and connection outside
    
$GLOBALS['connections'][$id] = $connection;
    
$GLOBALS['buffers'][$id] = $buffer;
}

function 
ev_error($buffer$error$id) {
    
event_buffer_disable($GLOBALS['buffers'][$id], EV_READ EV_WRITE);
    
event_buffer_free($GLOBALS['buffers'][$id]);
    
fclose($GLOBALS['connections'][$id]);
    unset(
$GLOBALS['buffers'][$id], $GLOBALS['connections'][$id]);
}

function 
ev_read($buffer$id) {
    while (
$read event_buffer_read($buffer256)) {
        
var_dump($read);
    }
}
?>

上一篇: 下一篇: