Темы для PHP, разделяющие объект центрального сокета

Я создаю многопоточное приложение PHP CLI, которое говорит с сервером через сокеты. Цель состоит в том, чтобы приложение только создавало одно соединение с сервером (через отдельный класс), а затем разрешало дочерним потокам использовать установленный объект сокета. Не удалось выполнить следующий код:

<?php /** * Test child class **/ class test extends Thread { private $server; public function __construct( &$server ) { $this->server = $server; } public function run() { echo $this->server->request( 'INFO 1-10' ); } } /** * Socket class **/ class socket { private $socket; public function __construct( $host, $port ) { $this->socket = fsockopen( $host, $port, $errno, $errstr, 10 ); } public function request( $out ) { fwrite( $this->socket, $out . "\r\n" ); return fgets( $this->socket ); } } /** * main class **/ class main { private $server; public function __construct() { $this->server = new socket( '192.168.1.141', 5250 ); } public function main() { $test = new test( $this->server ); $test->start(); } } $main = new main(); $main->main(); ?> 

Сообщение об ошибке:

 PHP Warning: fwrite() expects parameter 1 to be resource, integer given in /test_stackoverflow/test.sh on line 35 PHP Stack trace: PHP 1. {main}() /test_stackoverflow/test.sh:0 PHP 2. socket->request() /test_stackoverflow/test.sh:17 PHP 3. fwrite() /test_stackoverflow/test.sh:35 PHP Warning: fgets() expects parameter 1 to be resource, integer given in /test_stackoverflow/test.sh on line 36 PHP Stack trace: PHP 1. {main}() /test_stackoverflow/test.sh:0 PHP 2. socket->request() /test_stackoverflow/test.sh:17 PHP 3. fgets() /test_stackoverflow/test.sh:36 

Если я удалю аспект Thread и воспользуюсь следующим кодом:

 <?php /** * Test child class **/ class test { private $server; public function __construct( &$server ) { $this->server = $server; } public function run() { echo $this->server->request( 'INFO 1-10' ); } } /** * Socket class **/ class socket { private $socket; public function __construct( $host, $port ) { $this->socket = fsockopen( $host, $port, $errno, $errstr, 10 ); } public function request( $out ) { fwrite( $this->socket, $out . "\r\n" ); return fgets( $this->socket ); } } /** * main class **/ class main { private $server; public function __construct() { $this->server = new socket( '192.168.1.141', 5250 ); } public function main() { $test = new test( $this->server ); $test->run(); } } $main = new main(); $main->main(); ?> 

Этот код работает успешно.

Похоже, что передача объекта $ server (класс сокета) путем ссылки на класс, который расширяет Thread, вызывает проблему.

Мне было интересно, есть ли способ выполнить мою первоначальную цель создания многопоточного приложения CLI для PHP, которое говорит с сервером через одно соединение сокетов.

Спасибо за твою помощь!

Окончательное приложение будет гораздо более надежным, позволяя динамически создавать потоки. Пример, приведенный выше, заключается в отображении проблемы с корнем, и ничего больше.