Мне нужно прочитать данные с последовательного порта и отправить их в веб-сокет. Я зацикливаюсь на while
, и когда приходят какие-то данные, я их выбрасываю.
Учитывая приведенный ниже код, который является очень маленькой модификацией из примера цикла Павла , send()
никогда не выполняется, и я не могу понять, почему. Я попытался отправить код в автономном php, и он работает, но когда я добавляю его в цикл while
, похоже, он никогда не выполняется. Я вижу отладку INVIO
, но затем она возвращается к LOOP
, и сообщение не передается.
Я пробовал даже более простой пример без цикла React, но ведет себя точно так же, send()
, по-видимому, никогда не достигается.
$loop = \React\EventLoop\Factory::create();
$reactConnector = new \React\Socket\Connector($loop, [
'dns' => '8.8.8.8',
'timeout' => 10
]);
$connector = new \Ratchet\Client\Connector($loop, $reactConnector);
$loop->addPeriodicTimer(8, function () use($connector){
echo "LOOP\n";
do {
sleep(1);
$msg = $this->getSerial()->read();
// $msg = $this->getSerial()->readPort();
echo "LETTO <$msg>\n";
} while (strlen($msg) < 50);
echo "INVIO $msg\n";
$connector('ws://127.0.0.1:9988')
->then(function(Ratchet\Client\WebSocket $conn) {
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})\n";
});
$conn->send('Hello World!');
$conn->close();
}, function(\Exception $e) {
echo "Could not connect: {$e->getMessage()}\n";
});
});
$loop->run();