Почему метод phpws onMessage блокируется потоком?

Это пример phpws, где я пытаюсь использовать многопоточность:

class Cli_TestHandler extends WebSocketUriHandler
{
public function onMessage(WebSocketTransportInterface $user, WebSocketMessageInterface $msg)
{
$dataIn = Zend_Json::decode($msg->getData());

switch ($dataIn['type']) {
case 'test1':
$test1 = new Cli_Model_Test1();
$test1->start();
echo 'END';
break;
case 'test2':
$test2 = new Cli_Model_Test2();
$test2->start();
break;
}
}
}

Это класс Cli_Model_Test1:

class Cli_Model_Test1 extends Thread
{
public function run()
{
for ($i = 0; $i < 10; $i++) {
sleep(10);
echo 1;
}
}
}

и это класс Cli_Model_Test2:

class Cli_Model_Test2 extends Thread
{
public function run()
{
echo 2;
}
}

Таким образом, основное поведение должно состоять в том, что когда я отправляю сообщение из браузера с типом ‘test1’, это должно вызвать поток test1, а когда я посылаю сообщение с ‘type2’, это должно запускать поток test2. И это работает так, но поток test1 блокирует метод onMessage, и все отправленные сообщения ожидают в очереди. Это происходит до конца цикла for внутри потока test1.

Это вывод сервера WebSocket:

2016-11-27T20:31:03+01:00 NOTICE (5): phpws listening on tcp://127.0.0.1:8080
2016-11-27T20:31:03+01:00 DEBUG (7): Got an HYBI style request, sent HYBY handshake response
2016-11-27T20:31:03+01:00 NOTICE (5): Added client connection-583b347776c42 to Cli_TestHandler
END 20:33:38
1 19:33:48
1 19:33:58
1 19:34:08
1 19:34:18
1 19:34:28
1 19:34:38
1 19:34:48
1 19:34:58
1 19:35:08
1 19:35:18
2 19:35:18

Почему onMessage заблокирован?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]