Php/docs/eio.examples

来自菜鸟教程
跳转至:导航、​搜索

范例

Example #1 Cancelling a request

<?php /* Is called when eio_nop() finished */ 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 processedeio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "2");// Process requestseio_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);/* Is called when eio_chmod() finished */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/* Callback for the custom callback */function my_custom_callback($data, $result) {    var_dump($data);    var_dump(count($result));    var_dump($result['data_modified']);    var_dump($result['result']);}/* The custom request */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/* * Create a group request to open, read and close a file */$temp_filename = dirname(__FILE__) ."/eio-file.tmp";$fp = fopen($temp_filename, "w");fwrite($fp, "some data");fclose($fp);/* Is called when the group requests are done */function my_grp_done($data, $result) { global $temp_filename; var_dump($result == 0); @unlink($temp_filename);}/* Is called when eio_open() done */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);}/* Is called when eio_read() done */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

<?phpfunction my_eio_poll($fd, $events, $arg) {    /* Some libevent regulation might go here .. */    if (eio_nreqs()) {        eio_poll();    }    /* .. and here */}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");/* some other eio_* calls here ... */// set event flagsevent_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));// set event base event_base_set($event, $base);// enable eventevent_add($event);// start event loopevent_base_loop($base);/* The same will be available via buffered libevent interface */?>

以上例程的输出类似于:


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 jobseio_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