stream = $stream; stream_set_blocking($stream, false); } /** * {@inheritDoc} * * @param mixed $data * @return void */ public function send($data) { fwrite($this->stream, json_encode($data)."\0"); } /** * {@inheritDoc} * * @return mixed */ public function receive() { $buf = fread($this->stream, 8192); if (!$buf) { return false; } return json_decode(rtrim($buf, "\0"), true); } /** * {@inheritDoc} * * @return boolean */ public function isOpen(): bool { return is_resource($this->stream); } /** * Create a pair of connected StreamChannel instances * * @return StreamChannel[] */ public static function createPair() { $fd = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP); return [ new StreamChannel($fd[0]), new StreamChannel($fd[1]) ]; } }