toknot/php-epoll
Composer 安装命令:
composer require toknot/php-epoll
包简介
PHP bindings to the linux epoll C API.
关键字:
README 文档
README
PHP bindings to the linux epoll API.
Requirements
- PHP >= 7.4
- PHP FFI extension available
- Linux > 2.6
Install
use composer install:
composer require toknot/php-epoll
include composer autoload file : ./vendor/autoload.php
Reference
-
Epoll::__construct() -
Epoll::create(int $flags)open an epoll file descriptor
-
Epoll::ctl(int $op, int $fd, EpollEvent $events): intcontrol interface for an epoll file descriptor
-
Epoll::wait(EpollEvent $event, int $maxevents, int $timeout, $sigmask = null): intwait for an I/O event on an epoll file descriptor
-
Epoll::getFdno(resource $file): intget id from file descriptor of php resource (support file and php net socket)
-
Epoll::lastErrno(): intget last error code
-
Epoll::lastError(): stringget last error message
-
Epoll::ffi(): FFI -
Epoll::initEvents($num): EpollEvent -
EpollEvent::__construct(Epoll $epoll,$num) -
EpollEvent::setEvent($event, $idx)set Epoll events
-
EpollEvent::setData($data, $idx)set user data variable
-
EpollEvent::getEvents($idx): FFI\CData
Simple Example
php resource to file descriptor
$epoll = new Epoll(); $fp = fopen(__FILE__, 'rb'); $fdno = $epoll->getFdno($fp, Epoll::RES_TYPE_FILE); $fdfp = fopen("php://fd/$fdno", 'rb'); echo fread($fdfp, 1024);
epoll example from man epoll
const MAX_EVENTS = 10; const EXIT_FAILURE = 1; $epoll = new Epoll(); $ev = $epoll->initEvents(MAX_EVENTS); $events = $epoll->initEvents(); $stream = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr); $listen_sock = $epoll->getFdno($stream, Epoll::RES_TYPE_NET); function perror($str) { fprintf(STDERR, $str); } $epollfd = $epoll->create(0); $ev->setEvent(Epoll::EPOLLIN); $ev->setData(['fd' => $listen_sock]); if ($epoll->ctl(Epoll::EPOLL_CTL_ADD, $listen_sock, $ev) == -1) { perror("epoll_ctl: listen_sock"); exit(EXIT_FAILURE); } for (;;) { $nfds = $epoll->wait($events, MAX_EVENTS, -1); if ($nfds == -1) { perror("epoll_wait"); exit(EXIT_FAILURE); } for ($n = 0; $n < $nfds; ++$n) { if ($events[$n]->data->fd == $listen_sock) { $conn_sock = stream_socket_accept($stream); if (!$conn_sock) { perror("accept"); exit(EXIT_FAILURE); } stream_set_blocking($conn_sock, false); $ev->setEvent(Epoll::EPOLLIN | Epoll::EPOLLET); $connFdno = $epoll->getFdno($conn_sock, Epoll::RES_TYPE_NET); $ev->setData(['fd' => $connFdno]); if ($epoll->ctl(Epoll::EPOLL_CTL_ADD, $connFdno, $ev) == -1) { perror("epoll_ctl: conn_sock"); exit(EXIT_FAILURE); } } else { do_use_fd($events[$n]->data->fd); } } }
toknot/php-epoll 适用场景与选型建议
toknot/php-epoll 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 23 次下载、GitHub Stars 达 32, 最近一次更新时间为 2019 年 09 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「events」 「asynchronous」 「ffi」 「epoll」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 toknot/php-epoll 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 toknot/php-epoll 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 toknot/php-epoll 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Asynchronous coroutines for PHP 7.
Библиотека для реализаций паттерна Pub/Sub
Symfony ResqueBundle
Wireless Cross-Component Communication
A powerful event calendar Tool for Laravel's Nova 5.
Generic PHP Threads library using only pure PHP
统计信息
- 总下载量: 23
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 32
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2019-09-26