danog/ipc

IPC component for Amp.

Maintainers

👁 danog

Package info

github.com/danog/ipc

pkg:composer/danog/ipc

Statistics

Installs: 726 199

Dependents: 6

Suggesters: 0

Stars: 11

Open Issues: 0

1.0.1 2025-04-18 14:42 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 505e672b76af6ec623f7ef78efb2416f62ef8e29

  • Daniil Gentili <daniil.woop@daniil.it>
  • Aaron Piotrowski <aaron.woop@trowski.com>
  • Stephen Coakley <me.woop@stephencoakley.com>

asyncasynchronousconcurrentmulti-threadingmulti-processing


README

👁 Continuous Integration
👁 License

danog/ipc provides an async IPC server.

Installation

composer require danog/ipc

Example

Server:

<?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);
}

Client:

<?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();