©
本文档使用 PHP中文网手册 发布
Example #1 Cancelling a request
<?php
function my_nop_cb ( $data , $result ) {
echo "my_nop " , $data , "\n" ;
}
// This eio_nop() call will be cancelled
$req = eio_nop ( EIO_PRI_DEFAULT , "my_nop_cb" , "1" );
var_dump ( $req );
eio_cancel ( $req );
// This time eio_nop() will be processed
eio_nop ( EIO_PRI_DEFAULT , "my_nop_cb" , "2" );
// Process requests
eio_event_loop ();
?>
以上例程的输出类似于:
resource(4) of type (EIO Request Descriptor) my_nop 2
Example #2 Calling eio_chmod()
<?php
$temp_filename = dirname ( __FILE__ ) . "/eio-temp-file.tmp" ;
touch ( $temp_filename );
function my_chmod_callback ( $data , $result ) {
global $temp_filename ;
if ( $result == 0 && ! is_readable ( $temp_filename ) && is_writable ( $temp_filename )) {
echo "eio_chmod_ok" ;
}
@ unlink ( $temp_filename );
}
eio_chmod ( $temp_filename , 0200 , EIO_PRI_DEFAULT , "my_chmod_callback" );
eio_event_loop ();
?>
以上例程的输出类似于:
eio_chmod_ok
Example #3 Making a custom request
<?php
function my_custom_callback ( $data , $result ) {
var_dump ( $data );
var_dump ( count ( $result ));
var_dump ( $result [ 'data_modified' ]);
var_dump ( $result [ 'result' ]);
}
function my_custom ( $data ) {
var_dump ( $data );
$result = array(
'result' => 1001 ,
'data_modified' => "my custom data" ,
);
return $result ;
}
$data = "my_custom_data" ;
$req = eio_custom ( "my_custom" , EIO_PRI_DEFAULT , "my_custom_callback" , $data );
var_dump ( $req );
eio_event_loop ();
?>
以上例程的输出类似于:
resource(4) of type (EIO Request Descriptor) string(14) "my_custom_data" string(14) "my_custom_data" int(2) string(14) "my custom data" int(1001)
Example #4 Grouping requests
<?php
$temp_filename = dirname ( __FILE__ ) . "/eio-file.tmp" ;
$fp = fopen ( $temp_filename , "w" );
fwrite ( $fp , "some data" );
fclose ( $fp );
function my_grp_done ( $data , $result ) {
global $temp_filename ;
var_dump ( $result == 0 );
@ unlink ( $temp_filename );
}
function my_grp_file_opened_callback ( $data , $result ) {
global $my_file_fd , $grp ;
$my_file_fd = $result ;
var_dump ( $result > 0 );
// Create eio_read() request and add it to the group
$req = eio_read ( $my_file_fd , 4 , 0 , EIO_PRI_DEFAULT , "my_grp_file_read_callback" );
eio_grp_add ( $grp , $req );
}
function my_grp_file_read_callback ( $data , $result ) {
global $my_file_fd , $grp ;
var_dump ( $result );
// Create eio_close() request and add it to the group
$req = eio_close ( $my_file_fd );
eio_grp_add ( $grp , $req );
}
$grp = eio_grp ( "my_grp_done" , "my_grp_data" );
// Create eio_open() request and add it to the group
$req = eio_open ( $temp_filename , EIO_O_RDWR | EIO_O_APPEND , NULL ,
EIO_PRI_DEFAULT , "my_grp_file_opened_callback" , NULL );
eio_grp_add ( $grp , $req );
var_dump ( $grp );
eio_event_loop ();
?>
以上例程的输出类似于:
resource(6) of type (EIO Group Descriptor) bool(true) string(4) "some" bool(true)
Example #5 Using eio with libevent extension
<?php
function my_eio_poll ( $fd , $events , $arg ) {
if ( eio_nreqs ()) {
eio_poll ();
}
}
function my_nop_cb ( $d , $r ) {
var_dump ( $r ); var_dump ( $d );
}
$base = event_base_new ();
$event = event_new ();
$fd = eio_get_event_stream ();
var_dump ( $fd );
eio_nop ( EIO_PRI_DEFAULT , "my_nop_cb" , "nop data" );
eio_mkdir ( "/tmp/abc-eio-temp" , 0750 , EIO_PRI_DEFAULT , "my_nop_cb" , "nop data" );
// set event flags
event_set ( $event , $fd , EV_READ , "my_eio_poll" , array( $event , $base ));
// set event base
event_base_set ( $event , $base );
// enable event
event_add ( $event );
// start event loop
event_base_loop ( $base );
?>
以上例程的输出类似于:
int(3) int(0) string(8) "nop data" int(0) string(10) "mkdir data"
Example #6 Using eio with event extension
<?php
$base = new EventBase ();
// Retrieve eio polling stream.
// Note, this variable should be alive as long as the event loop is running.
$eio_stream = eio_get_event_stream ();
// Bind eio polling stream to the event loop.
$poll_event = new Event ( $base , $eio_stream , Event :: READ , function () {
if ( eio_nreqs ()) {
eio_poll ();
}
});
$poll_event -> add ();
// Add eio jobs
eio_nop ( EIO_PRI_DEFAULT , function () {
echo "eio_nop\n" ;
});
// Add events
$timer = Event :: timer ( $base , function () {
echo "2 seconds elapsed\n" ;
});
$timer -> add ( 2 );
// Dispatch events.
$base -> dispatch ();
?>
以上例程的输出类似于:
eio_nop 2 seconds elapsed