PHP 拡張モジュールで Tokio を扱う | ext-php-rs 本拡張は、Rust 側で Tokio を用いた async/await 実装を行いつつ、PHP へは 同期(blocking)API として公開する方式を採用する。 PHP から見ると通常の関数呼び出しだが、内部では Tokio の非同期タスクを実行し、block_on により結果を待ち受けて返す。 コード
H2O で HTTP/2 サーバー (libuv) gcc server_h2_tls.c -o server_h2_tls \ -I"$HOME/.local/include" \ -L"$HOME/.local/lib" \ -lh2o -luv -lssl -lcrypto -lm -lpthread
H2O で HTTP/1 サーバー (libuv) gcc server.c -o server -I"$HOME/.local/include" -L"$HOME/.local/lib" -lh2o -luv -lssl -lcrypto -lm -lpthread server.c #include <stdio.h>
nghttp2 でブロッキングな HTTP/2 サーバー gcc -O2 -Wall -Wextra server.c -o server -lnghttp2 -lssl -lcrypto openssl req -x509 -newkey rsa:2048 -nodes \
nghttp2 でブロッキングな h2c サーバー (TLS なしの HTTP/2 サーバー) gcc -Wall -Wextra -O2 server.c -o server $(pkg-config --cflags --libs libnghttp2) masakielastic@penguin:~/http-server$ ./server Listening on 127.0.0.1:8080 (h2c prior-knowledge) Try: nghttp -v http://127.0.0.1:8080/ --no-tls --pri
nghttp2 でブロッキングな HTTP クライアント (イベントループなし) gcc -Wall -Wextra -O2 client.c -o client $(pkg-config --cflags --libs libnghttp2 openssl) ./client httpbin.org 443 /get H: :status: 200
tiny_http サーバーでシングルスレッドの HTTP/1 サーバー| PHP 拡張 | Rust Cargo.toml [package] name = "php_httpd_ext" version = "0.1.0" edition = "2021"