|
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 processed eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "2");
// Process requests eio_event_loop(); ?>
The above example will output
something similar to:
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(); ?>
The above example will output
something similar to:
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(); ?>
The above example will output
something similar to:
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(); ?>
The above example will output
something similar to:
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) { /* 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 flags event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "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);
/* The same will be available via buffered libevent interface */ ?>
The above example will output
something similar to:
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(); ?>
The above example will output
something similar to:
eio_nop
2 seconds elapsed
|