问题标签 [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 - 不明白如何将 WWW::Mechanize 与 LWP::Protocol::AnyEvent::http 一起使用
因此,我在涉足事件驱动编程方面遇到了困难。其中大部分是由于仍然按顺序思考,但我很难理解任何人在使用LWP::Protocol::AnyEvent::http时如何同步他们的代码,并且正在寻求一些帮助来理解。这是我可以创建的最小程序,它表明我基本缺乏理解:
foreach
在进入循环之前如何确保 ->get 已成功?将->get
立即返回,因为它在使用模块时不会阻塞LWP::Protocol::AnyEvent::http
。所以没有->links
,程序就退出了。删除LWP::Protocol::AnyEvent::http
显然会使程序返回链接,就像一个常规的顺序程序一样,也像一个一样慢。
感谢您的任何见解。
perl - 在 Mojolicious 中使用 AnyEvent run_cmd,我不断收到此错误:“AnyEvent::CondVar:递归阻塞等待尝试”
在 Mojolicious 应用程序中,我试图在单击链接时将 ODT 文件转换为 HTML。我使用 shell 命令“soffice”转换文件。转换文件需要一些时间。我向用户发送状态消息以通知他进度。我通过写入 Mojo::Log 对象来发送这些状态更新消息。然后,我在 EventSource 路由中订阅此日志对象。
然后我遍历文件并使用 AnyEvent::Util run_cmd 执行外部“soffice”程序。
几乎从主要的 AnyEvent 教程中复制和粘贴。如果只有很少的文件需要转换(大约 2 或 3 个),那么一切顺利。通过 EventSource 连接发送的状态消息显示在客户端浏览器上。然后在转换完所有文件后,呈现网页。
如果要处理更多文件,则转换一些文件,然后出现线程标题中的错误消息。
包含上述代码的路由的路由是这样的:
上面的代码在“initdocs”路径中。
任何帮助表示赞赏。提前致谢。
perl - 如何在 Perl/Tk + AnyEvent 中停止 MainLoop
我正在编写使用 AnyEvent 计时器的 Perl/Tk 程序。如果计时器处于活动状态,我在关闭窗口时遇到问题。我做了这个窗口关闭处理程序:
如果在我关闭窗口时计时器处于活动状态,则计时器停止,窗口关闭,但 MainLoop 不会停止。怎么了?
perl - Windows Perl 中的 AnyEvent 错误
我尝试在 Windows Perl 中使用 AnyEvent 的 fork_call。我写了一些示例代码:
但我收到以下错误:
perl - 使用 N 个并发异步 HTTP 客户端下载总共 M 个文件,其中 M 很大,N 是可配置的
我正在尝试编写一个脚本,该脚本将N
通过 HTTP 同时下载大多数文件。
我以前使用AnyEvent::Worker::Pool来管理 BLOCKING 任务池。我还结合使用AnyEvent::HTTP和AnyEvent->condvar来单独管理非阻塞下载。
我认为结合这两种方法应该非常简单,以便AnyEvent->condvar使 AnyEvent::HTTP::http_get 从AnyEvent::Worker::Pool的角度来看是 BLOCKING 。
但是,我遇到了一些我不明白的错误,大概是由于AnyEvent::Worker的实现细节。这是演示该问题的脚本的真正精简版本:
演示输出如下:
为什么选择AnyEvent::HTTP?
在我的真实脚本中,我使用了更多的功能AnyEvent::HTTP
;特别是,我将on_body
回调与Term::StatusBar
为脚本的最终用户显示进度条相结合;此外,我在on_body
回调中策略性地“暂停”,以使传输速率等于或小于最终用户预定义的速率。
请随时提出具有这些功能的替代方案(或破解它们的简单方法!)
为什么选择AnyEvent::Worker::Pool?
我已经很熟悉了。欢迎提供替代建议。
为什么是电动汽车?
它很快。同样,欢迎提出替代建议。
perl - Perl - 强制 LWP::Protocol 子类选择,还是有更好的方法?
背景:
我已经为基于AnyEvent::HTTP的 HTTP(S) 编写了一个LWP::Protocol “实现器” 。(即:它同时实现HTTP 和 HTTPS)。
它与LWP::Protocol::AnyEvent::http或Coro::LWP的不同之处在于它不会 BLOCK on $protocol->request
。我已经为 select()、名称解析等实现了与Coro::LWP相同的大部分技巧,但更好地利用了AnyEvent。
现在返回的 HTTP 响应$protocol->request()
是230 - Pending Completion of Request
,但我愿意接受更好的方法来传达它不是一个完整的请求。
我还编写了HTTP::Response的一个子类,如果他们试图在响应完成之前使用部分响应,它会强制标准“消费者”方法上的 BLOCKING;它还添加了与内部/提供的 AnyEvent::CondVar
良好工作的方法,以便您可以一次触发大量请求,以及使用AnyEvent做其他事情。(我还覆盖了所有 LWP::UserAgent 的后send_request()
逻辑,将其推迟到真正的请求完成)。
问题:
我目前正在做一个 hack,如果我的LWP::UserAgentscheme
子类通过附加'_async'
异步请求来“升级”URL ,并且我已经让LWP::Protocol子类成为方案匹配的“实现者”/^https?_async$/
问题:
如何让我的LWP::UserAgent子类选择我的(更异步的)HTTP 和 HTTPS 协议“实现者”而不是系统上安装的其他协议?(即:当LWP::UserAgent子类调用LWP::Protocol::create
时)。
我可以强制选择我的“实施者”吗?还是有更自然的方法来做到这一点?
perl - Perl AnyEvent 并发内部结构
我有一个服务器,它在每个客户端连接上创建一个“AnyEvent 计时器”观察者对象(将其添加到 AnyEvent 循环中)。
所以回调将每 $interval 秒执行一次。如果有很多客户端,则必须同时执行一些回调。AnyEvent 如何处理这个问题?它是一个接一个地执行这些回调还是在这种情况下有一些并发机制,以便这些回调将同时执行?(例如,通过创建多个线程来加速必须同时执行的多个回调的执行)
在我的服务器的情况下,回调执行数据库查找。数据库连接的数据库句柄已在事件循环之外初始化。我担心的是,如果 AnyEvent 中有任何并发机制,那么回调不能同时执行,因为一个回调必须等到另一个回调完成数据库查找并且数据库句柄空闲。
PS感谢'ikegami'的回答。
perl - 为什么 AnyEvent 计时器观察者必须在其回调中取消定义才能触发?
在尝试理解 AnyEvent 时,我创建了两个计时器,每次触发时都会打印到屏幕上。最初两者都不起作用。但是按照Joshua Barratt 的计时器示例,我发现如果我没有undef
计时器的观察者变量,那么计时器的回调根本不会触发。为什么会这样?我怀疑它与 perl 和/或 AnyEvent 中范围的工作方式有关。
这是我的示例程序:
照原样,我的代码返回:
如果我取消注释该undef $t2;
行,定时器 2 的回调被触发,我得到这个:
perl - AnyEvent::HTTP 基本示例不起作用
在 Debian 和 Centos 上尝试过,都使用 perl 5.10
之后没有声音
模块是否存在根本性的问题,或者我是否需要更新的 perl 版本,尽管我希望对此有所抱怨?
编辑:
所以我需要事件循环,有没有一些简单的例子可以展示AE::HTTP
用法?
perl - Anyevent::RabbitMQ Perl QoS prefetch_count 不起作用
我一直在尝试使用 RabbitMQ perl 库 Net::RabbitFoot,它在下面使用 AnyEvent::RabbitMQ。根据RabbitMQ Tutorial,将 prefetch_count 设置为 1 应该确保公平调度,因为不应该将消息发送给已经忙于处理另一条消息的工作人员。然而,perl 实现Net::RabbitFoot ,即使在设置了这里描述的 qos 后,似乎也不能以这种方式工作,第 54 行。它似乎只是进行香草循环调度并最终调度到已经执行的机器工作。这是qos实现。你能帮我弄清楚为什么会这样吗?这是图书馆的错误吗?
提前致谢。
编辑:
这是我的设置:2 个消费者附加到同名队列。当我发送大量消息时,我看到了这种模式:消费者 1:Msg1、Msg3、Msg5 ... 消费者 2:Msg2、Msg4、...所有消息都来自同一个队列。现在发生的情况是,如果 Msg3 占用了消费者 1,当消费者 2 空闲时,仍然将 Msg5 发送给消费者 1。