danog / ipc
Amp的IPC组件
1.0.0
2023-02-14 13:19 UTC
Requires
- php: >=8.1
- amphp/byte-stream: ^2
- amphp/parser: ^1
Requires (Dev)
- amphp/amp: v3.x-dev
- amphp/parallel: v2.x-dev
- amphp/php-cs-fixer-config: v2.x-dev
- amphp/phpunit-util: v3.x-dev
- phpunit/phpunit: ^9
- psalm/phar: ^5
README
danog/ipc
提供一个异步IPC服务器。
安装
composer require danog/ipc
示例
服务器
<?php declare(strict_types=1); require 'vendor/autoload.php'; use Amp\Ipc\Sync\ChannelledSocket; use function Amp\async; use function Amp\Ipc\listen; $clientHandler = function (ChannelledSocket $socket) { echo "Accepted connection".PHP_EOL; while ($payload = $socket->receive()) { echo "Received $payload".PHP_EOL; if ($payload === 'ping') { $socket->send('pong'); $socket->disconnect(); } } echo "Closed connection".PHP_EOL."==========".PHP_EOL; }; $server = listen(sys_get_temp_dir().'/test'); while ($socket = $server->accept()) { async($clientHandler, $socket); }
客户端
<?php declare(strict_types=1); require 'vendor/autoload.php'; use Amp\Ipc\Sync\ChannelledSocket; use function Amp\async; use function Amp\Ipc\connect; $clientHandler = function (ChannelledSocket $socket) { echo "Created connection.".PHP_EOL; while ($payload = $socket->receive()) { echo "Received $payload".PHP_EOL; } echo "Closed connection".PHP_EOL; }; $channel = connect(sys_get_temp_dir().'/test'); $thread = async($clientHandler, $channel); $channel->send('ping'); $thread->await();