问题标签 [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 投票
3 回答
3479 浏览

perl - 使用 AnyEvent (Perl) 创建单线程服务器

我正在创建一个本地服务来监听 localhost 并提供一个基本的调用和响应类型接口。我想开始的是一个婴儿服务器,您可以通过 telnet 连接到它并回显它接收到的内容。

我听说 AnyEvent 对此非常有用,但是 AnyEvent::Socket 的文档并没有给出如何做到这一点的很好的例子。我想用 AnyEvent、AnyEvent::Socket 和 AnyEvent::Handle 来构建它。

现在,小服务器代码如下所示:

这不起作用,如果我 telnet 到 localhost:44244 我得到这个:

我想如果我知道如何制作一个小型单线程服务器,我可以通过 telnet 连接到它并打印出它给定的任何内容,然后等待更多输入,我可以从那里走得更远。有任何想法吗?

0 投票
2 回答
2505 浏览

perl - 如何将 AnyEvent::Handler 与具有端口重用的套接字一起使用

最近我遇到了一个很棒的 perl 模块“AnyEvent”,它允许用户进行异步/事件驱动的编程。

创建了以下代码片段,它工作正常。我遇到的问题是,在它打开和关闭大量套接字后,它很快耗尽了所有客户端端口(“netstat -ant”显示 20,000 多个套接字处于 TIME_WAIT 状态)。

我想知道是否可以使用 IO::Socket::INET 创建 TCP 套接字,然后在 AnyEvent::Handle 中使用新创建的套接字:

试过了,但它不起作用。感谢任何建议/意见。

感谢 ikegami 对此进行了调查并提出了建议。但是,似乎 SO_REUSEADDR 没有生效。这是我使用的代码(基于他的建议)

我的系统是 Ubuntu 11.04。在目录 /proc/sys/net/ipv4 中,以下是两个文件的内容:

% 更多 tcp_tw_recycle

1

% 更多 tcp_tw_reuse

1

0 投票
2 回答
242 浏览

linux - 通过 perl、linux 和 anyevent 在分叉进程中启动并行任务的聪明方法是什么?

我对 AnyEvent::Utils::fork_call 有疑问。我正在使用 fork_call,然后做一些工作,然后我应该结束我的 fork_call,并开始新的并行任务。

我试过了:

我想任何事件 fork_call 都在等待它的所有孩子完成他们的工作。

那么我该如何避免这个问题呢?也许我应该摆脱父进程?

欢迎任何建议和意见。谢谢你。

0 投票
1 回答
549 浏览

perl - perl 异步代码中的回调

我正在尝试制作一个队列管理器,以便在特定文件夹中创建文件时获取作业。我使用 AnyEvent 创建了我的代码,所以它是异步的。我的问题是,我正在尝试使用回调从子程序 add_route 和 del_route 传递返回值,但是 AE::timer 不会停止,并且回调获取的值不会保存在变量中$return_code。我哪里出错了?

交叉张贴在PerlMonks

0 投票
1 回答
339 浏览

perl - 有 AnyEvent::DNS 最大请求限制吗?

我想用来AnyEvent::DNS在某些 DNS 服务器上解析我的域。服务器列表来自两个地方,每个地方大约有 60 多个服务器。当我只为一个服务器列表运行解析时,没问题。但是如果我为所有列表运行解析,我得到一个错误:"unable to create either an IPv4 or an IPv6 socket".

我的脚本如下:

0 投票
2 回答
750 浏览

perl - AnyEvent fork_call 和 ping

我正在尝试创建一个 perl 模块,它可以 ping(使用 linux 系统 ping)到数百台主机,并从标准输出获取 ping 的数据(例如丢包以及传输的数据包数量以及接收的数据包数量等)每个主机的。我使用了 AnyEvent::Util fork_call,但我被卡住了,因为它没有收集标准输出。我创建了一个小脚本来演示我正在尝试做的事情:

我哪里错了?

0 投票
2 回答
755 浏览

perl - 简单的 ZeroMQ Perl (AnyEvent) HelloWorld 程序在两次循环迭代后挂起

我稍微修改了 ZeroMQ 指南中的 helloworld 服务器程序 ( hwserver.pl ),以使用 AnyEvent 实现它。然而,在 REQ/REP 的两次迭代之后,程序挂起。有人能弄清楚为什么吗?

这是服务器:

这是客户:

这是服务器的输出:

这是客户端的输出:

怎么了?

0 投票
1 回答
2691 浏览

perl - Perl AnyEvent 抛出 HTTP 错误 595

我一直在尝试使用 Perl AnyEvent HTTP 模块和以下代码发出异步请求。

我不断从请求中得到以下响应:

我一直在检查 AnyEvent 文档以了解此错误的原因,但没有成功。在这个问题上找不到其他有用的线程,除了超时重试的建议,这会产生相同的结果。一个简单的 'wget' 可以在同一个 URL 上工作并且它还活着。谁能指出如何调试这个问题?

0 投票
2 回答
1140 浏览

perl - How to check if a child process is alive when using a child watcher in Perl

I am trying to implement some code using AnyEvent and EV. I would like to install a child watcher ( Mockup of what I want done below)

I would like some help writing the child_alive() as well as figuring out when various callback as well as placing an exit in kill_child(). I need to make sure that cleanup_after_child() is called before the process exits.

Would using an AnyEvent Signal watcher help? My goal is to be able to safely shut down a daemon process, by first killing the processes children and cleaning up after them. I have asked a related question earliyer (Waiting on a child process in perl) and would like to prevent that bug from occuring during the exit handling.

Thanks

EDIT: Would the following work for a child_alive() function?

In other words, would the callback have already been called once the child exited, or would the callback only be executed on the next iteration of the EventLoop? if so, How can I exit only after all the signals have been handled? do I just delete all the events like:

sorry, I am more of trying to figure out how AnyEvent will handle these signals rather than how signals work in general.

0 投票
1 回答
1722 浏览

perl - 如何使用任何事件进行异步 www-mechanize

我一直在对该主题进行大量研究,尽管存在一些相关的问题,但我真的很难理解如何使用 AnyEvent 和 www-mechanize 正确进行异步编程。我试图坚持使用 mechanize,因为它有一个干净的界面并且具有我期望做的内置功能:(比如获取网站的所有图像等)。如果没有可靠/好的方法来做我想做的事,那么我将开始研究 AnyEvent::HTTP 但我想在朝那个方向前进之前我会先问一下。

我是 AnyEvent 编程的新手,但之前使用回调完成了大量的 perl 和 javascript/jquery 异步调用。这些对我来说很有意义,但对于我来说,AnyEvent + Mech 并没有点击。

这是我正在处理的从上游队列中提取 URL 的代码。给出 URL,我想要一个说拉入页面上的所有图像,然后异步。抓取所有图像。

所以伪代码看起来像这样:

  • 从队列中获取 url
  • 获取页面
  • 获取所有 img url 链接
  • 对 img url 进行许多异步调用(例如将 imgs 存储在后端)

我读过,我不能(在研究错误之后)阻止 AnyEvent 回调。如何构建我的程序以在不阻塞的情况下执行异步调用?

AE 事件只能在 AE 感知功能阻塞时处理,所以我使用LWP::Protocol::AnyEvent::http。它将 LWP (Net:HTTP) 的普通 HTTP 后端替换为 AnyEvent::HTTP,这是 AE 感知的。

工人的创建方式如下:

异步部分是调用 _proc_msg 的子 _recv_msg。

根据 ZeroMQ perl binding docs,我已经有一个 AnyEvent 循环监视 ZeroMQ 套接字...

非常感谢任何帮助!

代码:

如您所见,我在 _proc_msg 中尝试 Coro,我尝试只进行机械调用,但出现错误

因为 $mech 仍然在回调中阻塞。我不知道如何正确地在我的回调中进行机械调用。


应 ikegami 的要求,我添加了发送 url 的驱动程序。出于测试目的,我让它只是读取一个 RSS 提要,并将链接发送给工作人员以尝试处理。我对带有回调的任何事件的基本结构感到好奇,但我很高兴能在整个程序上获得帮助。下面是驱动代码:

这是一个示例运行:

如果我没有明确地做一个'使用 Coro;' 在 Worker.pm 中,不会显示 coro FATAL 错误。如果没有进一步的运行时错误,我不知道异步是如何工作的。

示例配置文件(feeds.cfg):


所以我今天花了更多时间来处理这个问题。所以我做 $c->join 的方式的错误。我不应该这样做,因为我无法阻止回调。Coro 将安排异步块,并在完成后完成。我唯一需要确保做的就是以某种方式知道所有异步何时完成,我想我可以弄清楚。现在棘手的部分是试图弄清楚这个小谜团:

这个 while 循环导致我在 _proc_msg 中的 async { } 线程不运行。删除 while 循环,只处理第一个 msg 和 coros 运行。将 while 循环留在原处,它们将永远不会运行。对我来说很奇怪,还没有弄清楚为什么。


进一步更新:

zmq_msg_recv 被阻塞。此外,父级中的 zmq_send 可以阻止。必须使用 ZMQ_NOBLOCK。我将 worker 和 main 完全拆分为单独的程序。