问题标签 [pecl-event]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
703 浏览

php - PHP 事件中的循环行为

我正在使用 libevent 的 PHP Event 类包装器来读取串行端口。我正在使用它来避免缓冲区溢出 - 想法是使用 Event 定期检查端口,这样就不会丢失数据。

我希望事件在设置时会触发,但得出的结论是事件仅在调用EventBase::loop(). 在这种情况下,当我调用loop(). 最终控制流返回到我的代码在调用循环之后的位置。

我从这种行为中假设我本质上是在调度事件的调度,并且应该定期调用 loop() 以避免我的事件被 CPU 耗尽。

但是在这种情况下,我不应该loop()在之前的loop()调用运行时调用,因为根据上面的解释,控制流要么在我的代码中,要么在 libevent 中,并且不能同时在两者中。

loop()所以我通过我的代码(总共四个 - 我正在摸索)发出调用,其中两个产生 libevent 重入警告。

我显然不明白这一点。任何人都可以帮忙吗?

干杯保罗

0 投票
2 回答
510 浏览

asynchronous - Php 7.1 + Pecl-event + libevent - 在奇怪的情况下挂起

基于这个答案,我已经切换到pecl-event库。我现在有:

下面的例子表现得很奇怪。如果$loop->run()runme()函数内部调用,它会起作用并调用回调。但是如果$loop->run()从外部调用runme(),它会挂起!

运行结果:

我错过了什么还是其中一个库/PHP有问题?有人有运行 php7.1 + react + libevent 的经验吗?

更新:================================================ =====================

我用最新的“react/socket”库“0.8.6”进行了测试。

它工作正常并返回:

但是,如果您进入 \React\Socket\TcpConnector::waitForStreamOnce() 并在新的 Promise 对象中删除 $canceller 函数,如下所示,它会再次挂起。看起来它可以在最新版本的 react 中工作,因为 socket 没有以明显的方式存储,实际上类似于 v0.4.6 中的代码。