Introduction

This extension provides asyncronous POSIX I/O by means of » libeio C library written by Marc Lehmann.

Note: This extension is not available on Windows platforms.

Warning

It is important to be aware that each request is executed in a thread, and the order of execution of continuously queued requests basically is unpredictable. For instance, the following piece of code is incorrect.

Example #1 Incorrect requests

<?php
// Request to create symlink of $filename to $link
eio_symlink($filename$link);

// Request to move $filename to $new_filename
eio_rename($filename$new_filename);

// Process requests
eio_event_loop();
?>
In the example above eio_rename() request may finish before eio_symlink(). To fix it you might call eio_rename() in the callback of eio_symlink():

Example #2 Calling request from a request callback

<?php
function my_symlink_done($filename$result) {
 
// Request to move $filename to $new_filename
 
eio_rename($filename"/path/to/new-name");

 
// Process requests
 
eio_event_loop();
}

// Request to create symlink of $filename to $link
eio_symlink($filename$linkEIO_PRI_DEFAULT"my_symlink_done"$filename);

// Process requests
eio_event_loop();
?>
Alternatively, you might want to create a request group:

Example #3 Calling request from a request callback

<?php
/* Is called when the group requests are done */
function my_grp_done($data$result) {
 
// ...
}

function 
my_symlink_done($filename$result) {
 
// Create eio_rename request and add it to the group
 
$req eio_rename($filename"/path/to/new-name");
 
eio_grp_add($grp$req);
 
// You might want to add more requests...
}

// Create a request group
$grp eio_grp("my_grp_done""my_grp_data");

// Create eio_symlink request and add it to the group
// Pass $filename to the callback
$req eio_symlink($filename$link,
  
EIO_PRI_DEFAULT"my_symlink_done"$filename);
eio_grp_add($grp$req);

// Process requests
eio_event_loop();
?>
Group is a special kind of request that could accumulate a set of regular eio requests. This could be used to create a complex request that opens, reads and closes a file.

Since version 0.3.0 alpha, a variable used in communications with libeio internally, could be retrieved with eio_get_event_stream(). The variable could be used to bind to an event loop supported by some other extension. You might organize a simple event loop where eio and libevent work together:

Example #4 Using eio with libevent

<?php
function my_eio_poll($fd$events$arg) {
    
/* Some libevent regulation might go here .. */
    
if (eio_nreqs()) {
        
eio_poll();
    }
    
/* .. and here */
}

function 
my_res_cb($d$r) {
    
var_dump($r); var_dump($d);
}

$base event_base_new();
$event event_new();

// This stream is used to bind with libevent
$fd eio_get_event_stream();

eio_nop(EIO_PRI_DEFAULT"my_res_cb""nop data");
eio_mkdir("/tmp/abc-eio-temp"0750EIO_PRI_DEFAULT"my_res_cb""mkdir data");
/* some other eio_* calls here ... */


// set event flags
event_set($event$fdEV_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 */
?>

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe
There are no comments available yet.

PHP cURL Tutorial: Using cURL to Make HTTP Requests

cURL is a powerful PHP extension that allows you to communicate with different servers using various protocols, including HTTP, HTTPS, FTP, and more. ...

TheMax

Autor : TheMax
Category: PHP-Tutorials

Midjourney Tutorial - Instructions for beginners

There is an informative video about Midjourney, the tool for creating digital images using artificial intelligence, entitled "Midjourney tutorial in German - instructions for beginners" ...

Mike94

Autor : Mike94
Category: KI Tutorials

Basics of views in MySQL

Views in a MySQL database offer the option of creating a virtual table based on the result of an SQL query. This virtual table can be queried like a normal table without changing the underlying data. ...

admin

Autor : admin
Category: mySQL-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial