问题标签 [anyevent]
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.
perl - AnyEvent->计时器不能与 AnyEvent::Handle 一起使用?
我正在尝试在我的 Catalyst、AnyEvent、Websocket 应用程序中构建超时场景。为此,我正在使用
假设几秒钟不活动(不再有 WS 帧进入)后应该调用它。
问题是,我的计时器从未执行过:
计时器回调永远不会执行。我的猜测是,计时器在另一个事件循环(AnyEvent::Handle)中不起作用?
perl - Examples from Net::RabbitMQ not working
I'm trying to learn RabbitMQ for a project I'm working on. My research showed two libraries to use, Net::RabbitMQ and AnyEvent::RabbitMQ. AnyEvent::RabbitMQ seems overly baroque for my needs but Net::RabbitMQ does not appear to work as the examples show it should. Below is some example code I found, it matches what I saw in the POD, but it isn't working.
It errors out :
perl - AnyEvent::Fork 如何等待孩子
我在看AnyEvent::Fork
模块。我有 20 个外部脚本我想并行调用(一次 6 个),并在全部完成后总结它们的输出。我不知道如何实现这一目标。
模块中的示例代码(仅调用 1 个子代码)有问题。我只是在代码中添加了一个简单的睡眠,不会立即返回,并且父进程会立即退出,而无需等待子进程。
结果是/tmp/log
空的。我不明白condvar
这里是如何使用的,它不在文档中。我可以得到正在运行的孩子的数量condvar
吗?
请帮助如何解决这个问题。
更新这里的主要问题是父母不等待孩子完成。
perl - 运行程序时找不到已安装的模块
语境
这是一个 perl 测试脚本,我想在其中了解如何使用特定的事件循环AnyEvent
:
问题
这是我在运行上述代码时遇到的错误:
但是我AnyEvent
使用安装了该软件包cpanm
,并且该AnyEvent/Impl/EV.pm
文件存在于以下@INC
路径之一中:
问题
我该如何解决 ?
额外备注
错误消息说它正在寻找EV.pm
,但我会预料到AnyEvent/Impl/EV.pm
的。
我写的怎么在运行时use AnyEvent::Impl::EV;
变成了perl is looking for EV.pm
?
perl - AnyEvent::Socket 和抽象 UNIX 套接字
使用 Socket 我可以使用:
一切都好。我连接并可以发送/接收;
使用 AnyEvent::Socket:
并得到错误:unable to connect: No such device or address at file.pl line X.
如何在 Anyevent::Socket 中使用抽象 UNIX 套接字?
perl - 如何在 AnyEvent 回调中“休眠”而不暂停整个脚本?
我特别使用 AnyEvent::Inotify::Simple (使用 EV 作为后端)来监视文件事件。所以我有一个处理程序回调,在特定情况下,我需要在继续之前“暂停”。 sleep
显然会停止一切(所以在sleep
完成之后才会处理其他事件),所以我尝试使用alarm
但是如果发生再次设置警报的相同场景,则原始警报(以及它的$SIG{ALRM}
子警报)将被忽略,并且只有“新“一个正在运行。
任何意见,将不胜感激?我所需要的只是一种让回调暂停的方法,同时继续异步处理新的 inotify 事件。
perl - 使用 AnyEvent::Handle 和 tcp_connect 重新连接
我有一个简单的 TCP 服务器和客户端,AnyEvent::Handle
使用tcp_connect
和tcp_server
. 客户端连接到服务器并Test Message
每 5 秒发送一次字符串。
如果服务器可访问,这将毫无问题,但是,如果在客户端启动时服务器不可用或不可用,则客户端脚本永远不会尝试重新连接。
如果连接句柄不可用(被破坏?),我希望它尝试重新连接。如果不可用,请执行操作(可能打印状态消息),但尝试每 5 秒重新连接一次将是理想的结果。
我不知道该怎么做。我已将我的客户端和服务器代码缩减为以下内容。
客户
服务器
perl - AnyEvent 文件写入加上 logrotate 导致意外的文件大小
我有一个使用 AnyEvent 频繁写入文件的脚本。我编写了以下示例来说明我面临的问题。
这很好用,但一段时间后文件大小会变得很大。我们使用 logrotate 来解决此类问题,因此我创建了以下 logrotate 配置文件。
这也很有效,只要上述输出文件超过 2M,它就会旋转到 out_test.log.1。但是,当轮换后立即写入 out_test.log 时,文件大小与轮换后的日志文件相同。这里解释了这种行为和我遇到的情况:https ://serverfault.com/a/221343
虽然我理解这个问题,但我不知道如何解决我提供的示例 Perl 代码中的问题。
我不必通过 logrotate 实现日志轮换,但它会是首选。如果在脚本中实现起来很简单,我可以这样做,但如果我可以让上面的示例与 logrotate 一起玩就好了。任何帮助或意见表示赞赏。谢谢!
编辑
根据下面的答案,我能够使用提供的 monkeypatch ikegami 以及按照 Marc Lehmann 的建议利用本机 perl I/O。我的示例代码看起来像这样并且运行良好。此外,这消除了 logrotate 中对 copytruncate 指令的要求。
perl - 如何启用 AnyEvent::XMPP 以使用 XML 流中的命名空间前缀连接到服务器?
我尝试连接的 XMPP 服务器具有如下命名空间前缀(zdef-#########):
反过来,导致以下“预期绑定和会话”错误:
我或多或少地使用这个例子连接到主机。我可以成功连接到另一个不使用这些命名空间前缀的主机。
使用 AnyEvent::XMPP,如何让脚本正确处理 XML 流?
一些版本信息:
- Perl 版本:v5.10.1
- AnyEvent::XMPP 版本:0.53
perl - AnyEvent::RabbitMQ 关闭通道的问题
我正在编写一个用于将消息发布到消息队列( RabbitMQ)中的主程序。该程序是用 Perl 5 编写的,并使用AnyEvent::RabbitMQ与 RabbitMQ进行通信。
以下最小示例(对于我遇到的问题)将在通过同一通道发送第二个命令时失败,并出现错误“通道已关闭”。
该程序应:
- 连接到 RabbitMQ
- 打开一个 RabbitMQ 通道
- 声明一个简单队列(名为“test”)
- 绑定到该队列(名为“test”)
- 发布消息(“你好,世界!”)
- 成功发布消息后,稍等片刻,再发布一条消息
这个程序(主程序)不应该消费消息。还有其他程序可以完成这项工作。
最小示例(见上文)将产生以下输出:
为什么AnyEvent::RabbitMQ
RabbitMQ 本身会关闭通道(不是连接或我错过了什么)?