我需要从串口读取数据并将其发送到websocket。我循环进入while
,当一些数据到达时我把它丢掉了。
鉴于下面的代码,这是Pawl's loop example的一点修改,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();
嘿ReactPHP核心团队成员在这里。因此,我从您的示例中注意到一些事情应该使调试更容易。
sleep
,您可以使用计时器再等一下。)