问题标签 [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.
c - 在 libev 中锁定 io watcher 和 timer watch
在 libev 中,我已经初始化了 io watcher 以捕获事件,并且该事件导致将某些值存储在某个缓存中。我有另一个计时器观察器,它每 10 秒运行一次,读取缓存值。在这种情况下,我认为存在竞争条件。我需要在两个不同的 libev watcher 中使用 lock 还是 libev 处理它。
例如:
在这里,我有循环并初始化 io watcher 以接受服务器事件,并且 timer watcher 每 10 秒查看一次缓存。在这种情况下,我是否需要自己处理比赛条件,或者两个观察者 io 和计时器运行时间由 libev 管理?
c++ - 链接libev + http server + libtls 的可行性
我想,我迷路了。
问题是我想使用基于事件循环的方法来实现简单的HTTPS 服务器(TLS 1.x)。从我目前所读到的内容来看,构建事件循环libev
的最佳候选者是,而如今使用 TLS 的最佳候选者libtls
来自LibreSSL 项目。
我确实知道它libev
不包含 DNS 和 HTTP 服务器(而不是libevent
),所以我必须找到另一个库来添加此功能,或者自己使用实现它。我找到http-parser
了可以帮助我的图书馆。
关于 TLS 的事情,我相信 LibreSSLlibtls
可以毫无问题地适应,因为实际上你正在处理什么样的字节字符串并不重要。
所以主要的问题是:我这样想对吗?真的可以使用libev
++http-parser
来libtls
构建基于事件循环的HTTPS服务器吗?实现它是否可行?我错过了什么重要的事情吗?你能推荐其他可以帮助我实现 HTTP 服务器的库吗?
提前非常感谢。
fork - 如果我没有在孩子身上调用 ev_loop_fork 会发生什么
我想,如果我没有在 child 中调用ev_loop_fork,那么 child 中的 watcher 就不会被触发。
这是我的代码,我用EVBACKEND_EPOLL和EVFLAG_NOENV标志构建了 ev_loop。
所以没有EVFLAG_FORKCHECK标志。
然后我在孩子中评论ev_loop_fork调用。
如果一切顺利,我以为孩子不会触发超时回调函数。
但实际上,输出是这样的:
$ 4980 叉子 4981
$ 超时 4980
$ 超时 4981
似乎观察者仍然在孩子中被触发,它的行为与调用ev_loop_fork相同。
那是什么问题,谢谢。
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 利用率。
node.js - nodejs使用的libev中的ev_timer是如何实现的
nodejs中的setTimeout是用c语言库libev ev_timer实现的。ev_timer 是如何工作的?
它是使用轮询实现的吗?如果我将超时设置为 30 秒,是否有任何进程每毫秒检查一次等待超时?
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),在我复制另一个文件之前没有事件,然后我得到两个事件。
输出如下所示:
c - libev 循环在空闲时使用 99% 的 CPU
所以我有一个运行 libev I/O 循环和计时器循环的程序。当 char 数组达到 7000 个字符或计时器循环达到 10 秒时,它会转到 JSON POST 一个在 localhost 上运行的服务。I/O 循环导致程序在空闲时使用几乎 100% 的 CPU。
这个程序需要一个 1 或 0 的 argv:
- A 1 使程序只处理一行并退出。
- 0 使其等待输入。
只有当我们传递一个 0 并让它等待输入时,才会发生错误。
这是线程回溯和堆栈打印输出:
所以看起来 I/O 观察者在第一个事件之后获得了连续的 I/O 事件。它会正确等待第一个事件,但之后会消耗大部分 CPU。我这样使用它:
也许是管道导致了这种情况?
所以我写了一个测试程序,它只是一个简单的 libev I/O watcher:
即使使用管道调用时没有输入,I/O 回调也会每秒被命中数百次,如下所示:
当我将进程的标准输出通过管道传输到我的程序时,也会发生这种情况。
这是我的问题的根本原因。
linux - 无法在 alpine linux 上安装 EV cpan 模块
虽然这适用于 debian,但 alpine 拒绝编译 ( perl 5.20.3 && plenv
)。
已安装模块 =>
如何解释 cpanm 日志中的相关错误?
c - 即使所有观察者都停止,如何保持 libev 运行
libev
即使所有观察者都停止了,如何继续运行?