我编写了一个高吞吐量服务器,它在自己的线程中处理每个请求.对于进入它的请求,有时需要对一个或多个后端执行RPC.这些后端RPC由一个单独的队列和线程池处理,它提供了对创建的线程数和后端最大连接数的一些限制(它执行一些缓存以重用客户端并节省开销不断创造联系).完成所有这些后,我开始认为基于事件的架构会更有效率.
在搜索时我没有发现任何与Java相关的等价物,但也许我不是在寻找正确的地方?来自Apache的Mina-statemachine是我发现的最接近的东西,但它看起来比我需要的更冗长,并且没有真正的版本可用.
有什么建议?
任何人都可以(通过代码)或向我解释如何在ac程序中使用libevent和curl?我正在尝试编写一个高性能的非阻塞数据监视器,它需要将数据上传到CouchDB实例.我对libevent和curl都很熟悉,但是将curl_multi与libevent合并让我难以理解.我不明白官方libcurl示例的程序流程- 有人能指出或提供一个更简单的例子吗?
我一直试图将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 …
我想memcached在Windows上运行.我已经下载了memcached最新的稳定版并在Windows 7下使用Mingw进行了编译.配置失败并出现错误,
检查libevent目录... configure:错误:需要libevent.你可以从http://www.monkey.org/~provos/libevent/获得它
Run Code Online (Sandbox Code Playgroud)If it's already installed, specify its path using --with-libevent=/dir/
然后我下载libevent并编译了它.这产生了3个DLL,libeventcore,libevent-extra和libevent-2.0.5.
我memcached使用该选项再次运行configure --with-libevent.但由于某种原因,它再次失败并出现同样的错误.我不知道它失败的原因.任何人都可以帮我解决这个问题吗?或者有更好的方法memcached在Windows上运行吗?我已经看到很多用于Windows的预构建二进制文件.但他们都使用旧版本memcached.而AFAIK,Windows memcached在新版本中得到官方支持.
我在MinGW上使用Windows7 64位版本.
即将从源代码编译 libevent,我刚刚注意到它似乎依赖于 OpenSSL 进行加密o_O。
这听起来像是臃肿。
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) 我想在我的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,但失败了.任何人都可以帮我解决这个问题.如果你解释原因,那将是非常好的.
我正在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
我想在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安装的.
我该如何解决?
我和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()在这里不适用.
提前致谢.
我正在设计一个高性能服务器(不是HTTP服务器),正在考虑我的设计选项.服务器应支持大量传入连接(以千计),并在Windows和Linux上进行编译.
在Windows端,我已经实现了IO完成端口服务器,到目前为止似乎处理压力.由于Linux需求弹出,我现在尝试找到一个跨平台库,它为我提供了一种方法来使用线程池的接受/读取事件.
到目前为止,LIBEVENT似乎是一个正确的选择(如"示例代码:回声服务器"的东西在这个链接).但引用libEvent文档中的另一个页面:
如果将event_base设置为使用锁定,则可以安全地在多个线程之间访问它.但是它的循环只能在一个线程中运行.如果要让多个线程轮询IO,则需要为每个线程分配一个event_base.
我的基本设计是让线程池响应接受和读取事件.如果我理解正确的话,这句话说我做不到.
有没有人有高性能的经验.基于libEvent的服务器?我应该使用不同的图书馆吗?
这种服务器的示例代码将是完美的
libevent ×10
c ×2
android ×1
asynchronous ×1
c++ ×1
dependencies ×1
encryption ×1
file ×1
java ×1
libcurl ×1
linux ×1
macos ×1
memcached ×1
mingw ×1
nonblocking ×1
openssl ×1
osx-yosemite ×1
swift ×1
swift3 ×1
telegram ×1
tmux ×1
ubuntu ×1
windows ×1