问题标签 [libev]

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 回答
381 浏览

c - 在 libev 中锁定 io watcher 和 timer watch

在 libev 中,我已经初始化了 io watcher 以捕获事件,并且该事件导致将某些值存储在某个缓存中。我有另一个计时器观察器,它每 10 秒运行一次,读取缓存值。在这种情况下,我认为存在竞争条件。我需要在两个不同的 libev watcher 中使用 lock 还是 libev 处理它。

例如:

在这里,我有循环并初始化 io watcher 以接受服务器事件,并且 timer watcher 每 10 秒查看一次缓存。在这种情况下,我是否需要自己处理比赛条件,或者两个观察者 io 和计时器运行时间由 libev 管理?

0 投票
0 回答
484 浏览

c++ - 链接libev + http server + libtls 的可行性

我想,我迷路了。

问题是我想使用基于事件循环的方法来实现简单的HTTPS 服务器(TLS 1.x)。从我目前所读到的内容来看,构建事件循环libev的最佳候选者是,而如今使用 TLS 的最佳候选者libtls来自LibreSSL 项目

我确实知道它libev不包含 DNS 和 HTTP 服务器(而不是libevent),所以我必须找到另一个库来添加此功能,或者自己使用实现它。我找到http-parser了可以帮助我的图书馆。

关于 TLS 的事情,我相信 LibreSSLlibtls可以毫无问题地适应,因为实际上你正在处理什么样的字节字符串并不重要。

所以主要的问题是:我这样想对吗?真的可以使用libev++http-parserlibtls构建基于事件循环的HTTPS服务器吗?实现它是否可行?我错过了什么重要的事情吗?你能推荐其他可以帮助我实现 HTTP 服务器的库吗?

提前非常感谢。

0 投票
1 回答
172 浏览

fork - 如果我没有在孩子身上调用 ev_loop_fork 会发生什么

我想,如果我没有在 child 中调用ev_loop_fork,那么 child 中的 watcher 就不会被触发。

这是我的代码,我用EVBACKEND_EPOLLEVFLAG_NOENV标志构建了 ev_loop。

所以没有EVFLAG_FORKCHECK标志。

然后我在孩子中评论ev_loop_fork调用。

如果一切顺利,我以为孩子不会触发超时回调函数。

但实际上,输出是这样的:

$ 4980 叉子 4981

$ 超时 4980

$ 超时 4981

似乎观察者仍然在孩子中被触发,它的行为与调用ev_loop_fork相同。

那是什么问题,谢谢。

0 投票
0 回答
227 浏览

libevent - 如何让 libwebsockets 在内部使用 kqueue() 系统调用而不是 _poll()?

到目前为止:1-我有一个使用 libwebsocket 服务器与浏览器(websockets 客户端)通信的本机应用程序。2- 当应用程序连接到 websockets 客户端时,我看到 CPU 使用率很高(活动监视器指示 4 核 mac 机器 - Yosemite(10.10.4) 中的 100% 使用率),我们看到函数 _poll() 正在使用75% CPU:使用 Time Profiler 应用程序看到。3-因此,我将libwebsockets配置为使用libev,希望libev在内部使用kqueue,从而降低cpu利用率[按照此链接中提到的步骤:https ://github.com/warmcat/libwebsockets/blob/e800db52bd0b42285b56d32a20f6d0d142571a89/changelog向下滚动到 v1.3-chrome37-firefox30 -> 用户 api 添加]

但仍然:我看到 libwebsockets 正在使用 _poll() 函数。

如果我错过了什么,谁能告诉我。我的最终目标是看到 libwebsockets 工作 - 在内部使用 kqueue 并检查它是否会降低 CPU 利用率。

0 投票
1 回答
176 浏览

node.js - nodejs使用的libev中的ev_timer是如何实现的

nodejs中的setTimeout是用c语言库libev ev_timer实现的。ev_timer 是如何工作的?

它是使用轮询实现的吗?如果我将超时设置为 30 秒,是否有任何进程每毫秒检查一次等待超时?

0 投票
1 回答
212 浏览

objective-c - Xcode:链接 libev.a 静态库失败,显示 dylib 错误

我正在开发一个 OS X 应用程序,并计划使用 libev 作为我的异步 I/O 库。

首先,我从官网下载最新的 libev 包文件,解压,然后:

然后我将include/ev.h.libs/libev.a文件添加到我的 xcode 项目中。Xcode 确实将 libev.a 识别为这样的新框架:

在此处输入图像描述

但是当我运行我的应用程序时,出现了错误:

这些信息是什么意思?我添加了一个 .a 文件,为什么它告诉我 .dylib 一个?

我添加这样的 libev.a 库是否正确?如果没有,我应该如何将 libev 链接为静态库?

提前谢谢你!

0 投票
1 回答
612 浏览

c++ - 如何使用 Inotify 和 libev 在文件夹中获取新添加的文件?

我的程序(在 C++ 中)使用 libev 事件循环。我需要在特定文件夹(比如 foo)上查看新文件。

我不能在块模式下使用 Inotify::WaitForEvents() 因为我不想阻止我的 libev 事件循环。正如inotify 文档中所建议的那样,我使用 Inotify::SetNonBlock(true) 使其成为非阻塞。然后将 inotify 文件描述符传递给 libev EV_STAT 以进行监视(如libev 文档中所建议的那样)。

当文件夹 foo 中有新文件时,确实会调用 EV_STAT 的 libev 回调。但是,当我使用 Inotify::WaitForEvents() 后跟 Inotify::GetEventCount() 时,我得到零事件。

我怀疑 libev 已经消耗了该事件并将其转换为 EV_STAT 事件。如果是这种情况,我怎样才能获得这些新文件的名称?

我知道 EV_STAT 回调参数中有 inode 编号,但是从 inode 编号获取文件名并非易事。所以如果我能得到文件名就更好了。

有什么建议么?


编辑

我写了一个小程序来重现这个问题。事件似乎并没有丢失。相反,当调用 libev 回调时,inotify 事件还没有到来。当您复制新文件时,该事件可能会重新出现。

重现问题的程序:

当我复制一个小文件(比如 300 字节)时,会立即检测到该文件。但是如果我复制一个更大的文件(比如 500 kB),在我复制另一个文件之前没有事件,然后我得到两个事件。

输出如下所示:

0 投票
2 回答
555 浏览

c - libev 循环在空闲时使用 99% 的 CPU

所以我有一个运行 libev I/O 循环和计时器循环的程序。当 char 数组达到 7000 个字符或计时器循环达到 10 秒时,它会转到 JSON POST 一个在 localhost 上运行的服务。I/O 循环导致程序在空闲时使用几乎 100% 的 CPU。

这个程序需要一个 1 或 0 的 argv:

  • A 1 使程序只处理一行并退出。
  • 0 使其等待输入。

只有当我们传递一个 0 并让它等待输入时,才会发生错误。

这是线程回溯和堆栈打印输出:

bt 和堆栈打印出来

所以看起来 I/O 观察者在第一个事件之后获得了连续的 I/O 事件。它会正确等待第一个事件,但之后会消耗大部分 CPU。我这样使用它:

也许是管道导致了这种情况?

所以我写了一个测试程序,它只是一个简单的 libev I/O watcher:

即使使用管道调用时没有输入,I/O 回调也会每秒被命中数百次,如下所示:

当我将进程的标准输出通过管道传输到我的程序时,也会发生这种情况。

这是我的问题的根本原因。

0 投票
1 回答
1427 浏览

linux - 无法在 alpine linux 上安装 EV cpan 模块

虽然这适用于 debian,但 alpine 拒绝编译 ( perl 5.20.3 && plenv)。

已安装模块 =>

如何解释 cpanm 日志中的相关错误?

0 投票
1 回答
127 浏览

c - 即使所有观察者都停止,如何保持 libev 运行

libev即使所有观察者都停止了,如何继续运行?