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

c++ - 使用多线程的 libev

我想使用带有多个线程的 libev 来处理 tcp 连接。我想要的是:

  1. 主线程监听传入的连接,接受连接并将连接转发到工作线程。

  2. 我有一个工作线程池。线程的数量取决于 cpu 的数量。每个工作线程都有一个事件循环。工作线程监听我是否可以在 tcp 套接字上写入或者是否有可读取的内容。

我查看了 libev 的文档,我知道这可以用 libev 完成,但我找不到任何示例我必须如何做到这一点。
有人有例子吗?我认为我必须使用 ev_loop_new() api,对于工作线程和主线程我必须使用 ev_default_loop() 吗?

问候

0 投票
1 回答
424 浏览

c - libev 网络服务器读取文件

在 C 中使用 libev 创建小型网络服务器时,在不阻塞反应器的情况下提供文件(打开、准备好、写入套接字)的最佳策略是什么?

我有一些建议一次阅读几个块,但我不确定这是否是正确的方法。

谢谢,

0 投票
2 回答
8045 浏览

c - 使用 libev 的套接字

我正在寻找基于 libev 编写一个套接字程序。我注意到https://github.com/coolaj86/libev-examples/blob/master/src/unix-echo-server.c中所述的几个示例使用基于 init 的回调。例如,

我的问题来自预期的行为,例如,我在 EV_READ 中读取的所有内容都存储在链接列表中。假设我不断获得免费的数据包流来读取,我有机会进入 EV_WRITE 吗?我必须将我通过读取接收到的所有内容发送到另一个套接字。那么它会是一次 EV_READ 和第二次 EV_WRITE 吗?换句话说,EV_WRITE 什么时候会被解除阻塞?或者我是否需要阻止 EV_READ 才能调用 EV_WRITE。有人可以帮我理解这一点吗?

0 投票
1 回答
1816 浏览

c++ - 如何使用 libev 在 C++ 中创建异步方法

我正在尝试使用 libev 在 C++ 中创建一个异步方法。如果需要,我可以将回调方法作为参数传递。

例如

test()是一个异步方法,所以下一条printf()语句应该在test()完成之前执行。

我尝试使用libev这个简单的例子:

在此示例中,printf在该事件循环停止后执行。使用 libev 可以实现这种功能吗?我用谷歌搜索,但找不到这种需要的例子。

0 投票
1 回答
924 浏览

c++ - libev 自定义事件

我正在尝试使用 libev 进行基于事件的编程。但是 libev 提供了一些事件,例如EV_READ, EV_WRITE, EV_TIMER ..

那么,是否有可能拥有我自己的自定义事件。

例如,我有来自套接字的连续消息流,而我只对该消息流中的一种消息感兴趣。所以,它基本上像

因此,我想注册此类事件(仅if满足该条件。)。它是一个自定义事件,对吗?如何将此事件指定给 libev。

我的意思是在 libev 我们这样指定..

我看不到任何可以检查我们自己事件的东西。可能吗 ?

0 投票
2 回答
414 浏览

php - 监视一组目录并生成“事件”,当新文件出现时——libevent 或 libev 可以这样做吗?

我正在用 PHP 编写一个程序(不要问),它需要监视一组等待文件出现和处理新人的目录。

libevent 或 libev(都有匹配的 PHP 扩展)可以生成这样的事件吗?我知道,两者(kqueue、epoll 等)使用的底层机制都支持这一点,但是库是否利用了这些功能?

我的程序必须在 Linux 和 Solaris 上运行,所以直接使用 inotify 已经过时了……

谢谢!

0 投票
1 回答
256 浏览

c - libev 套接字通信失败

我有一个基于 libev 的套接字服务器,它从多个同时套接字获取消息

我使用 recv() 从套接字接收消息。和 send() 与套接字通信问题是,有时即使我做了一个 send() 并且 send() 的输出> 0 仍然另一端的套接字什么也没收到

代码的精简版本在这里 http://pastebin.com/SM7uPkVD

(大部分是从网络上剪下来的)

问题是 99% 的套接字通信都工作得很好,只是在某些地方失败了。我有什么明显的遗漏吗

0 投票
1 回答
1079 浏览

c++ - libev 每个 fd 超过一个观察者失败

我似乎无法让每个套接字工作 2 个观察者。下面的代码根本不起作用,但如果我混淆了这些调用(例如,为 1 个观察者调用 init/set/start,然后为其他调用),我只有 1 名观察者工作.. 有什么我在这里严重遗漏的东西......?我认为它与循环和设置没有任何关系......我有 1 个接受循环(默认循环)和 1 个用于接受连接的循环。我尝试了这两种方法,在接受循环上接受连接后直接在下面运行代码,然后通过 ev_async_send(...) 然后从其他 io 循环执行此代码。结果是一样的。在 1 个观察者上设置这两个事件也可以正常工作。

谢谢

0 投票
2 回答
2184 浏览

libev - 一起使用 libev ev_io 和 ev_idle 事件

我有兴趣收听传入的连接,当没有活动连接时我想做后台处理。我还没有找到这两者的任何例子。

我想做类似这样的事情:

从一个例子:

现在在这个例子中,我应该在哪里添加空闲事件以及应该在何时何地启动和停止空闲事件,这样它就不会干扰主事件处理程序,并且应该只在它空闲时调用。

谢谢。

0 投票
1 回答
543 浏览

asynchronous - 无法加入 ev 循环线程,因为它挂在 epoll_wait()

我正在将异步hiredis与libev一起使用。mLoopThread 在这里用于 ev 循环线程,基本上 mLoopThread 正在调用 ev_loop()。当主线程试图破坏异步hiredis实例时,它调用ev_unloop试图让ev_loop()退出。代码如下所示。但这不起作用。回溯显示 mLoopThread 在 epoll_wait() 中挂起,主线程在 mLoopThread->join() 中挂起。如何退出ev循环线程?谢谢。