Go to file
Daniil Gentili 1c41b1a5ac
Merge pull request #2 from coswat/master
organized imports, formatted code with cargo fmt
2023-08-29 20:51:12 +02:00
.vscode First commit 2023-08-27 16:23:04 +02:00
crates/macros Fix license identifiers 2023-08-27 17:38:45 +02:00
examples/reqwest organized imports, formatted code with cargo fmt 2023-08-29 19:19:29 +05:30
src organized imports, formatted code with cargo fmt 2023-08-29 19:19:29 +05:30
.gitignore Add example 2023-08-27 19:32:52 +02:00
Cargo.toml Update deps 2023-08-27 19:52:56 +02:00
LICENSE Switch to Apache license 2023-08-28 12:42:47 +02:00
README.md Add link 2023-08-27 20:45:03 +02:00

php-tokio - Use any async Rust library from PHP!

Created by Daniil Gentili (@danog).

This library allows you to use any async rust library from PHP, asynchronously.

It's fully integrated with revolt: this allows full compatibility with amphp, PSL and reactphp.

Example

Here's an example, using the async Rust reqwest library to make asynchronous HTTP requests from PHP:

<?php

use Reqwest\Client;

use function Amp\async;
use function Amp\Future\await;

require 'vendor/autoload.php';

Client::init();

function test(int $delay): void {
    $url = "https://httpbin.org/delay/$delay";
    $t = time();
    echo "Making async reqwest to $url that will return after $delay seconds...".PHP_EOL;
    Client::get($url);
    $t = time() - $t;
    echo "Got response from $url after ~".$t." seconds!".PHP_EOL;
};

$futures = [];
$futures []= async(test(...), 5);
$futures []= async(test(...), 5);
$futures []= async(test(...), 5);

await($futures);

Usage:

cd examples/reqwest && \
    cargo build && \
    composer update && \
    php -d extension=../../target/debug/libexample_reqwest.so test.php

Result:

Making async reqwest to https://httpbin.org/delay/5 that will return after 5 seconds...
Making async reqwest to https://httpbin.org/delay/5 that will return after 5 seconds...
Making async reqwest to https://httpbin.org/delay/5 that will return after 5 seconds...
Got response from https://httpbin.org/delay/5 after ~5 seconds!
Got response from https://httpbin.org/delay/5 after ~5 seconds!
Got response from https://httpbin.org/delay/5 after ~5 seconds!

See the source code of the example for more info on how it works!

Built with php-tokio

Here's a list of async PHP extensions built with php-tokio (add yours by editing this file!):