标签: libevent

有一个Java等同于libevent吗?

我编写了一个高吞吐量服务器,它在自己的线程中处理每个请求.对于进入它的请求,有时需要对一个或多个后端执行RPC.这些后端RPC由一个单独的队列和线程池处理,它提供了对创建的线程数和后端最大连接数的一些限制(它执行一些缓存以重用客户端并节省开销不断创造联系).完成所有这些后,我开始认为基于事件的架构会更有效率.

在搜索时我没有发现任何与Java相关的等价物,但也许我不是在寻找正确的地方?来自Apache的Mina-statemachine是我发现的最接近的东西,但它看起来比我需要的更冗长,并且没有真正的版本可用.

有什么建议?

java state-machine event-based-programming libevent

5
推荐指数
1
解决办法
4201
查看次数

将libcurl与libevent一起使用

任何人都可以(通过代码)或向我解释如何在ac程序中使用libevent和curl?我正在尝试编写一个高性能的非阻塞数据监视器,它需要将数据上传到CouchDB实例.我对libevent和curl都很熟悉,但是将curl_multi与libevent合并让我难以理解.我不明白官方libcurl示例的程序流程- 有人能指出或提供一个更简单的例子吗?

c asynchronous nonblocking libcurl libevent

5
推荐指数
1
解决办法
3675
查看次数

交叉编译libevent for Android

我一直试图将libevent交叉编译到Android,我想知道我做错了什么并得到一些帮助.

我正在尝试构建的版本是libevent-2.0.19-stable

我开始按照http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/中描述的步骤进行操作,以及如何将Makefile重写为android.mk?

目标设备是运行cyanogenMod 7的三星Galaxy S2

经过多次尝试,我做的最好的是运行以下步骤:

1) Install android NDK and download libevent source code

2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b
Run Code Online (Sandbox Code Playgroud)

3)执行:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b

export    PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
Run Code Online (Sandbox Code Playgroud)

您需要导出设备的ABI.armeabi-v7a适用于ARMv7或更高版本的设备,任何其他设备都使用armeabi.

4)使用适当的参数执行./configure:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"
Run Code Online (Sandbox Code Playgroud)

在此期间发出警告:

configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used
Run Code Online (Sandbox Code Playgroud)

(我认为没关系)

由于它没有将arm-linux-androideabi识别为主机,因此我从http://git.savannah.gnu.org/gitweb/?p=config.git …

android cross-compiling libevent

5
推荐指数
2
解决办法
1万
查看次数

如何在Windows上编译memcached?

我想memcached在Windows上运行.我已经下载了memcached最新的稳定版并在Windows 7下使用Mingw进行了编译.配置失败并出现错误,

检查libevent目录... configure:错误:需要libevent.你可以从http://www.monkey.org/~provos/libevent/获得它

  If it's already installed, specify its path using --with-libevent=/dir/
Run Code Online (Sandbox Code Playgroud)

然后我下载libevent并编译了它.这产生了3个DLL,libeventcore,libevent-extra和libevent-2.0.5.

memcached使用该选项再次运行configure --with-libevent.但由于某种原因,它再次失败并出现同样的错误.我不知道它失败的原因.任何人都可以帮我解决这个问题吗?或者有更好的方法memcached在Windows上运行吗?我已经看到很多用于Windows的预构建二进制文件.但他们都使用旧版本memcached.而AFAIK,Windows memcached在新版本中得到官方支持.

我在MinGW上使用Windows7 64位版本.

c windows memcached mingw libevent

5
推荐指数
1
解决办法
2344
查看次数

libevent:为什么它依赖于 openssl?

即将从源代码编译 libevent,我刚刚注意到它似乎依赖于 OpenSSL 进行加密o_O。

这听起来像是臃肿。

  1. 提供独立于操作系统的异步 IO 抽象的库需要加密做什么?
  2. 它如何证明对 OpenSSL 的依赖是合理的,我认为 OpenSSL 也是庞大而复杂的?

libevent-2.0.21-stable/自述文件

38 The configure script also supports the following flags:
39 
40    --enable-gcc-warnings     Enable extra compiler checking with GCC.
41    --disable-malloc-replacement
42                              Don't let applications replace our memory
43                              management functions
44    --disable-openssl         Disable support for OpenSSL encryption.
45    --disable-thread-support  Don't support multithreaded environments.
Run Code Online (Sandbox Code Playgroud)

encryption dependencies openssl libevent

5
推荐指数
1
解决办法
4567
查看次数

在Ubuntu 12.04上安装tmux_1.8时出现libevent错误

我想在我的ubuntu 12.04之后安装tmux 1.8

tar zxvf tmux-1.8.tar.gz
cd tmux_1.8
./configure
Run Code Online (Sandbox Code Playgroud)

但这里有一些错误信息,

...
checking pkg-config is at least version 0.9.0... yes
checking for LIBEVENT... no
checking for library containing event_init... no
configure: error: "libevent not found"
mingchaoyan@mingchaoyan-VirtualBox:~/Downloads/tmux-1.8$ sudo apt-get install libevent
[sudo] password for mingchaoyan:   
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libevent
Run Code Online (Sandbox Code Playgroud)

我尝试apt-get install libevent,但失败了.任何人都可以帮我解决这个问题.如果你解释原因,那将是非常好的.

ubuntu libevent tmux

5
推荐指数
1
解决办法
7420
查看次数

在Swift中使用libevent和GCD(libdispatch)

我正在Swift 3中创建一个服务器端应用程序.我选择了libevent来实现网络代码,因为它是跨平台的并且不会遇到C10k问题.Libevent实现了它自己的事件循环,但我想保持CFRunLoop和GCD(DispatchQueue.main.after等)功能,所以我需要以某种方式粘贴它们.

这就是我想出的:

var terminated = false

DispatchQueue.main.after(when: DispatchTime.now() + 3) {
    print("Dispatch works!")
    terminated = true
}

while !terminated {
    switch event_base_loop(eventBase, EVLOOP_NONBLOCK) { // libevent
    case 1:
        break // No events were processed
    case 0:
        print("DEBUG: Libevent processed one or more events")
    default: // -1
        print("Unhandled error in network backend")
        exit(1)
    }
    RunLoop.current().run(mode: RunLoopMode.defaultRunLoopMode,
                          before: Date(timeIntervalSinceNow: 0.01))
}
Run Code Online (Sandbox Code Playgroud)

这有效,但引入了0.01秒的延迟.当RunLoop正在休眠时,libevent将无法处理事件.当应用程序空闲时,降低此超时会显着增加CPU使用率.

我也在考虑只使用libevent,但是项目中的第三方库可以在内部使用dispatch_async,因此这可能会有问题.

在另一个线程中运行libevent的循环会使同步变得更加复杂,这是解决此延迟问题的唯一方法吗?

LINUX更新.上面的代码在Linux上不起作用(2016-07-25-a Swift snapshot),RunLoop.current().run存在错误.下面是一个工作的Linux版本,重新实现了计时器和dispatch_main.它遇到了相同的延迟问题:

let queue = dispatch_get_main_queue()
let timer = …
Run Code Online (Sandbox Code Playgroud)

network-programming libevent grand-central-dispatch swift swift3

5
推荐指数
1
解决办法
547
查看次数

如何在OSX上安装正确版本的libevent?

我想在Macbook上使用最新版本的OSX 运行Telegram CLI.它之前的某个时间有效,但现在不起作用:

dyld: Library not loaded: /usr/local/opt/libevent/lib/libevent-2.0.5.dylib
  Referenced from: /Users/me/tg/bin/./telegram-cli
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我试过以下 -

brew unlink libevent && brew link libevent
brew uninstall --ignore-dependencies libevent
brew install libevent
Run Code Online (Sandbox Code Playgroud)

它没有帮助.看起来TG GLI寻找libevent 2.0.5,但是2.1.8是由brew安装的.

我该如何解决?

macos libevent telegram osx-yosemite

5
推荐指数
1
解决办法
563
查看次数

使用libevent2处理文件I/O的问题

我和libevent2合作了一段时间,但通常我用它来处理网络I/O(使用套接字).现在我需要阅读许多不同的文件,所以我也想使用它.我创建了这段代码:

int file = open(filename, O_RDONLY);
struct event *ev_file_read = event_new(ev_base, file, EV_READ | EV_PERSIST, read_file, NULL);

if(event_add(ev_file_read, NULL))
        error("adding file event");
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.我在尝试添加事件时收到此消息:

[警告] fd 7上的Epoll ADD(1)失败了.旧事件为0; 读取更改为1(添加); 写入更改为0(无):不允许添加文件事件的操作:不允许操作

该文件存在并具有读/写权限.

任何人都知道如何使用libevent处理文件IO?我还想到了缓冲事件,但是在API中只有函数bufferevent_socket_new()在这里不适用.

提前致谢.

linux file libevent

4
推荐指数
1
解决办法
4835
查看次数

使用libEvent的高性能服务器

我正在设计一个高性能服务器(不是HTTP服务器),正在考虑我的设计选项.服务器应支持大量传入连接(以千计),并在Windows和Linux上进行编译.

在Windows端,我已经实现了IO完成端口服务器,到目前为止似乎处理压力.由于Linux需求弹出,我现在尝试找到一个跨平台库,它为我提供了一种方法来使用线程池的接受/读取事件.

到目前为止,LIBEVENT似乎是一个正确的选择(如"示例代码:回声服务器"的东西在这个链接).但引用libEvent文档中的另一个页面:

如果将event_base设置为使用锁定,则可以安全地在多个线程之间访问它.但是它的循环只能在一个线程中运行.如果要让多个线程轮询IO,则需要为每个线程分配一个event_base.

我的基本设计是让线程池响应接受和读取事件.如果我理解正确的话,这句话说我做不到.

有没有人有高性能的经验.基于libEvent的服务器?我应该使用不同的图书馆吗?

这种服务器的示例代码将是完美的

c++ libevent

4
推荐指数
1
解决办法
3687
查看次数