vlambda博客
学习文章列表

PHP 事件扩展 Event 发布 3.0.0 beta 版本,正式支持 PHP 8


(给PHP开发者加星标,提升PHP技能

PHP 事件扩展 Event 对 libevent 库进行了封装,提供了面向对象的编程接口。开发者基于 Event 扩展,可以用 PHP 快速编写出事件驱动的应用程序。包括事件驱动非阻塞的 HTTP/HTTPS 服务器和客户端、定时器和信号等。


Event 扩展的维护者 Ruslan Osmanov 是一名俄罗斯程序员,同时维护了3个PHP事件扩展:

  • Event(libevent),Ev(libev),Eio(libeio),其中 Event 开发活跃度最高。

  • 像 ReactPHP、WorkerMan、AmPHP 这些内存常驻、事件驱动的 PHP 框架底层用的就是上面这些事件库的 PHP 封装。


Event 提供的 PHP 代码示例:https://bitbucket.org/osmanov/pecl-event/src/master/examples/

Event 提供的 PHP 官网文档:https://php.net/event


一个单进程事件驱动非阻塞的 HTTP 服务器,包含非阻塞的信号和周期性定时器,多个服务并发执行:

<?php// 事件管理器$base = new EventBase();
// 事件驱动非阻塞的HTTP服务器$http = new EventHttp($base);$http->bind('0.0.0.0', 8888);$http->setDefaultCallback(function($req) { $buf = new EventBuffer(); $req->addHeader('Content-Type', 'text/html; charset=utf-8', EventHttpRequest::OUTPUT_HEADER); $buf->add('<html>Hello World</html>'); $req->sendReply(200, 'OK', $buf); return;});
// 事件驱动非阻塞的HTTP客户端// EventHttpConnection::makeRequest
// 在终端 Ctrl+C 发送 SIGINT 信号给 PHP 进程$signal = new Event($base, SIGINT, Event::SIGNAL, function() use (&$base) { echo "\n捕获 SIGINT 信号,关闭事件循环,退出程序\n"; $base->stop();});$signal->add();
// 周期性定时器,每隔 1/2 秒触发一次$timer = new Event($base, -1, Event::TIMEOUT | Event::PERSIST, function() use (&$timer) { echo date('Y-m-d H:i:s'). "\n";});$timer->add(1/2);
// 启动事件循环$base->loop();

- EOF -

推荐阅读   点击标题可跳转

1、

2、

3、


看完本文有收获?请分享给更多人

关注「PHP开发者」加星标,提升PHP技能


点赞和在看就是最大的支持❤️