0, 'protocol' => 3]); // 2. Create push notifications consumer. Provides callback where current consumer subscribes to few channels before enter the loop. $push = $client->push(static function (ClientInterface $client) { $response = $client->subscribe('channel', 'control'); $status = ($response[2] === 1) ? 'OK' : 'FAILED'; echo "Channel subscription status: {$status}\n"; }); // 3. Storage for upcoming notifications. $messages = []; // 4. Create dispatcher for push notifications. $dispatcher = new DispatcherLoop($push); // 5. Attach callback for message data type. Print every message and store them in storage. // Send following commands via redis-cli to test: // // PUBLISH channel message1 // PUBLISH channel message2 // PUBLISH channel message3 // PUBLISH control terminate // Data types should be changed in near future. Instead of Message data type it should be one of kind data types. $dispatcher->attachCallback( PushResponseInterface::MESSAGE_DATA_TYPE, static function (array $payload, DispatcherLoopInterface $dispatcher) { global $messages; [$channel, $message] = $payload; if ($channel === 'control' && $message === 'terminate') { echo "Terminating notification consumer.\n"; $dispatcher->stop(); return; } $messages[] = $message; echo "Received message: {$message}\n"; } ); // 6. Run consumer loop with attached callbacks. $dispatcher->run(); // 7. Count all messages that were received during consumer loop. $messagesCount = count($messages); echo "We received: {$messagesCount} messages\n";