mirror of
https://github.com/danog/postgres.git
synced 2024-11-26 20:15:02 +01:00
Add multi-listen example
This commit is contained in:
parent
a18d7386bf
commit
d88d009359
63
examples/multi-listen.php
Normal file
63
examples/multi-listen.php
Normal file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
use Amp\Iterator;
|
||||
use Amp\Loop;
|
||||
use Amp\Postgres;
|
||||
|
||||
Loop::run(function () {
|
||||
$pool = Postgres\pool('host=localhost user=postgres');
|
||||
|
||||
$channel1 = "test1";
|
||||
$channel2 = "test2";
|
||||
|
||||
/** @var \Amp\Postgres\Listener $listener1 */
|
||||
$listener1 = yield $pool->listen($channel1);
|
||||
|
||||
printf("Listening on channel '%s'\n", $listener1->getChannel());
|
||||
|
||||
/** @var \Amp\Postgres\Listener $listener2 */
|
||||
$listener2 = yield $pool->listen($channel2);
|
||||
|
||||
printf("Listening on channel '%s'\n", $listener2->getChannel());
|
||||
|
||||
Loop::delay(6000, function () use ($listener1) { // Unlisten in 6 seconds.
|
||||
printf("Unlistening from channel '%s'\n", $listener1->getChannel());
|
||||
return $listener1->unlisten();
|
||||
});
|
||||
|
||||
Loop::delay(4000, function () use ($listener2) { // Unlisten in 4 seconds.
|
||||
printf("Unlistening from channel '%s'\n", $listener2->getChannel());
|
||||
return $listener2->unlisten();
|
||||
});
|
||||
|
||||
Loop::delay(1000, function () use ($pool, $channel1) {
|
||||
return $pool->notify($channel1, "Data 1.1");
|
||||
});
|
||||
|
||||
Loop::delay(2000, function () use ($pool, $channel2) {
|
||||
return $pool->notify($channel2, "Data 2.1");
|
||||
});
|
||||
|
||||
Loop::delay(3000, function () use ($pool, $channel2) {
|
||||
return $pool->notify($channel2, "Data 2.2");
|
||||
});
|
||||
|
||||
Loop::delay(5000, function () use ($pool, $channel1) {
|
||||
return $pool->notify($channel1, "Data 1.2");
|
||||
});
|
||||
|
||||
$iterator = Iterator\merge([$listener1, $listener2]); // Merge both listeners into single iterator.
|
||||
|
||||
while (yield $iterator->advance()) {
|
||||
$notification = $iterator->getCurrent();
|
||||
printf(
|
||||
"Received notification from PID %d on channel '%s' with payload: %s\n",
|
||||
$notification->pid,
|
||||
$notification->channel,
|
||||
$notification->payload
|
||||
);
|
||||
}
|
||||
});
|
Loading…
Reference in New Issue
Block a user