ev is a PECL extension providing inteface to libev library – high performance full-featured event loop written in C.
ABOUT LIBEV Libev is an event loop: you register interest in certain events (such as a file descriptor being readable or a timeout occurring), and it will manage these event sources and provide your program with events.
那么什么是libev呢,从网上摘录一段:libev 是高性能事件循环/事件模型的网络库,并且包含大量新特性。
它是继lievent和Event perl module之后的一套全新网络库。它追求的目标:速度更快,bug更少,特性更多,体积更小。 www.2cto.com它和libevent很像,按照作者的介绍,可以作为libevent的替代者,能够提供更高的性能。并不需要复杂的配置。
看起来和之前提到的libevent大有渊源,但是这个扩展的作者显然比较活跃,一周内提交了3个版本。
代码示例timer的使用php// 创建一个timer并于2秒后触发$w1 = new EvTimer(2, 0, function () {echo "2 seconds elapsed\n";});// 创建一个timer并于2秒后触发,每秒重复// 直到我们手工停止$w2 = new EvTimer(2, 1, function ($w) {echo "is called every second, is launched after 2 seconds\n";echo "iteration = ", Ev::iteration(), PHP_EOL;// Stop the watcher after 5 iterations Ev::iteration() == 5 and $w->stop();// Stop the watcher if further calls cause more than 10 iterations Ev::iteration() >= 10 and $w->stop();});// 创建一个已停止的timer,手工start才有效$w_stopped = EvTimer::createStopped(10, 5, function($w) {echo "Callback of a timer created as stopped\n";// Stop the watcher after 2 iterations Ev::iteration() >= 2 and $w->stop();});// Loop until Ev::stop() is called or all of watchers stop Ev::run();// Start and look if it works$w_stopped->start();echo "Run single iteration\n";Ev::run(Ev::RUN_ONCE);echo "Restart the second watcher and try to handle the same events, but don't block\n";$w2->again();Ev::run(Ev::RUN_NOWAIT);$w = new EvTimer(10, 0, function() {});echo "Running a blocking loop\n";Ev::run();echo "END\n";?>输出内容2 seconds elapsed is called every second, is launched after 2 seconds iteration = 1 is called every second, is launched after 2 seconds iteration = 2 is called every second, is launched after 2 seconds iteration = 3 is called every second, is launched after 2 seconds iteration = 4 is called every second, is launched after 2 seconds iteration = 5 Run single iteration Callback of a timer created as stopped Restart the second watcher and try to handle the same events, but don't block Running a blocking loop is called every second, is launched after 2 seconds iteration = 8 is called every second, is launched after 2 seconds iteration = 9 is called every second, is launched after 2 seconds iteration = 10 END I/O事件例1 php
