upscale / swoole-warmup
URL爬虫,用于预热Swoole网络服务器
1.5.0
2020-12-09 02:01 UTC
Requires
- php: >=7.1
- ext-swoole: ^4.0
- upscale/swoole-reflection: ^1.0
README
此库在启动时通过访问给定的URL来预先预热Swoole网络服务器。
网络服务器在启动后需要一段时间才能达到其最佳性能水平。推荐预热服务器以避免第一个客户端体验到速度慢,同时同时过度加载冷服务器。此库使自动化爬取提供的URL以在启动前预热服务器变得非常简单。
功能
- 在服务器启动时访问URL
- 一次性预热所有工作者
- 模拟工作者用户/组
- 在预热状态下重启工作者
安装
此库将通过Composer作为依赖项安装
composer require upscale/swoole-warmup
使用方法
通过启动时访问URL来预热服务器
use Upscale\Swoole\Warmup; require 'vendor/autoload.php'; $server = new \Swoole\Http\Server('127.0.0.1', 8080); $server->set([ 'dispatch_mode' => 1, 'user' => '_www', ]); $state = 'cold'; $server->on('request', function ($request, $response) use ($server, &$state) { $response->header('Content-Type', 'text/plain'); $response->end("Served by $state worker $server->worker_id\n"); $state = 'warm'; }); $crawler = new Warmup\Crawler($server, new Warmup\RequestFactory($server)); $crawler->browse([ 'http://127.0.0.1:8080/', ]); unset($crawler); $server->start();
技术
预热机制比普通的HTTP爬虫要先进得多。首先,它在服务器接受任何传入连接之前就调度请求。其次,调度是在内部进行的,避免了外部HTTP请求的开销。最后,预热是在用作克隆工作者进程示例的主进程中进行的。预热扩展到所有工作者,并且优化效果会持续到工作者进程的生命周期结束。Swoole工作者将根据max_request
设置进行周期性重启,作为内存泄漏缓解措施。
Swoole允许通过设置user
和group
来配置工作者进程的用户和组所有权。预热旨在在主进程中运行,主进程可能由不同的用户拥有,通常是root
超级用户。进程所有权不匹配可能导致访问文件系统中的应用程序的访问权限问题。工作者进程的权限将自动检测,并在预热期间模仿用户/组。进程权限仿真依赖于已安装和启用的进程控制扩展POSIX。
贡献
欢迎提交带有修复和改进的拉取请求!
许可
版权所有 © Upscale Software。保留所有权利。