gpt4 book ai didi

Ratchet 棘爪 : unable to send message to websocket in loop

转载 作者:行者123 更新时间:2023-12-04 16:14:20 25 4
gpt4 key购买 nike

我需要从串行端口读取数据并将其发送到 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 核心团队成员。因此,我从您的示例中注意到一些应该使调试更容易的事情。

  • 我们的 promise 有两种主要方式。 a) 然后,b) 完成。 then 可以被链接起来并用于执行一系列返回 promise 的操作。 done 不能并且被认为是链的结束,当一个错误被抛出但没有在链中处理时 done 将追溯它。您的代码中存在更改某些错误但异常|throwable 被吞下。
  • 建议不要在事件循环内运行 while 循环,因为它会阻塞循环,以及在其中运行的其他操作。 (使用 sleep 也是如此,您可以使用计时器再等一秒。)
  • 您似乎为每条消息打开一个连接,打开单个连接并通过该连接将每条新消息推送到 websocket 服务器不是更有效吗?
  • 关于 Ratchet 棘爪 : unable to send message to websocket in loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244404/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com