I'm new to socket stuff, here is my piece of code:
while (true) {
$status = $this->client->read();
echo $status;
$this->eventQueue->hasEventToSend() ? $this->client->send($this->eventQueue->getEvent()) : null;
}
client read method is just:
try {
$status = socket_read($this->socket, $length);
} catch (Throwable $exception) {
$this->reConnect();
Log::error($exception->getMessage());
$status = false;
}
return (string) $status;
Nothing will be executed after $status = $this->client->read()
, untill socket_read()
reads new data. I would like to stop socket_read()
acting like waiting for data to read or call socket_read()
only when there is any data to read. I couldn't get any idea, how to achive that, so I'm asking here ;)
By default reading operations are always blocking. You can either use
socket_set_nonblock($socket)
before calling read() to prevent socket from blocking in read operations, or you can use
socket_select()
to check if data is available before reading it.