问题标签 [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.

0 投票
1 回答
482 浏览

perl - AnyEvent->计时器不能与 AnyEvent::Handle 一起使用?

我正在尝试在我的 Catalyst、AnyEvent、Websocket 应用程序中构建超时场景。为此,我正在使用

假设几秒钟不活动(不再有 WS 帧进入)后应该调用它。

问题是,我的计时器从未执行过:

计时器回调永远不会执行。我的猜测是,计时器在另一个事件循环(AnyEvent::Handle)中不起作用?

0 投票
2 回答
561 浏览

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 :

0 投票
1 回答
802 浏览

perl - AnyEvent::Fork 如何等待孩子

我在看AnyEvent::Fork模块。我有 20 个外部脚本我想并行调用(一次 6 个),并在全部完成后总结它们的输出。我不知道如何实现这一目标。

模块中的示例代码(仅调用 1 个子代码)有问题。我只是在代码中添加了一个简单的睡眠,不会立即返回,并且父进程会立即退出,而无需等待子进程。

结果是/tmp/log空的。我不明白condvar这里是如何使用的,它不在文档中。我可以得到正在运行的孩子的数量condvar吗?

请帮助如何解决这个问题。

更新这里的主要问题是父母不等待孩子完成。

0 投票
2 回答
3238 浏览

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

0 投票
1 回答
271 浏览

perl - AnyEvent::Socket 和抽象 UNIX 套接字

使用 Socket 我可以使用:

一切都好。我连接并可以发送/接收;

使用 AnyEvent::Socket:

并得到错误:unable to connect: No such device or address at file.pl line X.

如何在 Anyevent::Socket 中使用抽象 UNIX 套接字?

0 投票
1 回答
714 浏览

perl - 如何在 AnyEvent 回调中“休眠”而不暂停整个脚本?

我特别使用 AnyEvent::Inotify::Simple (使用 EV 作为后端)来监视文件事件。所以我有一个处理程序回调,在特定情况下,我需要在继续之前“暂停”。 sleep显然会停止一切(所以在sleep完成之后才会处理其他事件),所以我尝试使用alarm但是如果发生再次设置警报的相同场景,则原始警报(以及它的$SIG{ALRM}子警报)将被忽略,并且只有“新“一个正在运行。

任何意见,将不胜感激?我所需要的只是一种让回调暂停的方法,同时继续异步处理新的 inotify 事件。

0 投票
2 回答
870 浏览

perl - 使用 AnyEvent::Handle 和 tcp_connect 重新连接

我有一个简单的 TCP 服务器和客户端,AnyEvent::Handle使用tcp_connecttcp_server. 客户端连接到服务器并Test Message每 5 秒发送一次字符串。

如果服务器可访问,这将毫无问题,但是,如果在客户端启动时服务器不可用或不可用,则客户端脚本永远不会尝试重新连接。

如果连接句柄不可用(被破坏?),我希望它尝试重新连接。如果不可用,请执行操作(可能打印状态消息),但尝试每 5 秒重新连接一次将是理想的结果。

我不知道该怎么做。我已将我的客户端和服务器代码缩减为以下内容。

客户

服务器

0 投票
2 回答
200 浏览

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 指令的要求。

0 投票
0 回答
152 浏览

perl - 如何启用 AnyEvent::XMPP 以使用 XML 流中的命名空间前缀连接到服务器?

我尝试连接的 XMPP 服务器具有如下命名空间前缀(zdef-#########)

反过来,导致以下“预期绑定和会话”错误:

我或多或少地使用这个例子连接到主机。我可以成功连接到另一个不使用这些命名空间前缀的主机。

使用 AnyEvent::XMPP,如何让脚本正确处理 XML 流?

一些版本信息:

  • Perl 版本:v5.10.1
  • AnyEvent::XMPP 版本:0.53
0 投票
1 回答
1080 浏览

perl - AnyEvent::RabbitMQ 关闭通道的问题

我正在编写一个用于将消息发布到消息队列( RabbitMQ)中的主程序。该程序是用 Perl 5 编写的,并使用AnyEvent::RabbitMQ与 RabbitMQ进行通信。

以下最小示例(对于我遇到的问题)将在通过同一通道发送第二个命令时失败,并出现错误“通道已关闭”。

该程序应:

  • 连接到 RabbitMQ
  • 打开一个 RabbitMQ 通道
  • 声明一个简单队列(名为“test”)
  • 绑定到该队列(名为“test”)
  • 发布消息(“你好,世界!”)
  • 成功发布消息后,稍等片刻,再发布一条消息

这个程序(主程序)不应该消费消息。还有其他程序可以完成这项工作。

最小示例(见上文)将产生以下输出:

为什么AnyEvent::RabbitMQRabbitMQ 本身会关闭通道(不是连接或我错过了什么)?