Non-blocking IO
Using the RxPHP extensions opens up quite a few possibilities. Its observables, operators, and subscribers/observers implementations are certainly powerful. What they don't provide, however, is asynchronicity. This is where the React library comes into play, by providing an event-driven, non-blocking I/O abstraction layer. Before we touch upon React, let's first lay out a trivial example of blocking versus non-blocking I/O in PHP.
We create a small beacon script that will merely generate some standard output (stdout) over time. Then, we will create a script that reads from the standard input (stdin) and see how it behaves when reading is done in the stream blocking and stream non-blocking mode.
We start by creating the beacon.php
file with the following content:
<?php $now = time(); while ($now + $argv[1] > time()) { echo 'signal ', microtime(), PHP_EOL; usleep(200000); // 0.2s }
The use of $argv[1]
hints that the file is intended to be run from console. Using $argv...