Ratchet Pawl:无法在循环中向websocket发送消息

问题描述 投票:0回答:1

我需要从串口读取数据并将其发送到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();
ratchet reactphp
1个回答
0
投票

嘿ReactPHP核心团队成员在这里。因此,我从您的示例中注意到一些事情应该使调试更容易。

  • 我们的承诺有两个主要方法。 a)然后,b)完成。然后可以链接并用于执行一系列返回promise的操作。完成不能并且被认为是链的结束,当抛出错误但在链中没有处理时,将返回它。您的代码中存在更改错误,但吞下异常| throwable。
  • 建议在事件循环中运行while循环,因为它将阻止循环,并在其中运行其他操作。 (所以使用sleep,您可以使用计时器再等一下。)
  • 您似乎打开了每条消息的连接,打开单个连接并通过该连接将每个新消息推送到websocket服务器是不是更有效?
© www.soinside.com 2019 - 2024. All rights reserved.