Are there any best practices for handling simultaneous sending and receiving of data on a serial interface using PHP?

When handling simultaneous sending and receiving of data on a serial interface using PHP, it is important to use non-blocking I/O operations to avoid blocking the script while waiting for data. One way to achieve this is by using the `stream_select()` function to monitor the serial port for incoming data while still being able to send data.

<?php

$serialPort = fopen('/dev/ttyUSB0', 'r+');

stream_set_blocking($serialPort, 0);

while(true) {
    $read = [$serialPort];
    $write = null;
    $except = null;

    if(stream_select($read, $write, $except, 0) > 0) {
        $data = fread($serialPort, 1024);
        // Process incoming data
        
        // Send data if needed
        fwrite($serialPort, "Hello from PHP\n");
    }

    // Do other tasks or sleep to avoid high CPU usage
    usleep(100000); // 100ms
}

fclose($serialPort);
?>