Downloader类
此类扮演的是下载器的角色,以下列举的是其常用的回调API以及普通API。
注意:由于主机禁止出现敏感IP,请自行将 localhost 替换为 127.0.0.1。
onDownloaderStart
参数
@param object $downloader 代表 downloader 实例
含义
1. 设置Downloader子进程启动时的回调函数,每个子进程启动时都会执行。
2. 回调属性 onDownloaderStart 是在子进程启动时运行的,总共会运行 $downloader->count 次。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onDownloaderStart = function($downloader){
echo "{$downloader->id}号下载器进程启动成功";
};
onDownloaderStop
参数
@param object $downloader 代表 downloader 实例
含义
1. 设置Downloader子进程停止时的回调函数,每个子进程停止时都会执行。
2. 回调属性 onDownloaderStop 是在子进程停止时运行的,总共会运行 $downloader->count 次。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onDownloaderStop = function($downloader){
echo "{$downloader->id}号下载器进程停止成功";
};
onDownloaderReload
参数
@param object $downloader 代表 downloader 实例
含义
此回调属性不常用到,用于设置下载器收到reload信号后执行的回调。
说明:
利用onDownloaderReload回调做很多事情,例如在不需要重启进程的情况下重新加载业务配置文件。
子进程收到reload信号默认的动作是退出重启,以便新进程重新加载业务代码完成代码更新。
所以reload后子进程在执行完onDownloaderReload回调后便立刻退出是正常现象。
如果在收到reload信号后只想让子进程执行onDownloaderReload而不想退出,可以在初始化
Downloader实例时设置对应的Downloader实例的reloadable属性为false。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
//设置reloadable为false,即子进程收到reload信号不执行重启。
$downloader->reloadable = false;
$downloader->onDownloaderReload = function($downloader){
//some code here
};
onDownloaderMessage
参数
@param object $downloader 代表 downloader 实例
@param array $parser_reply 代表 parser 端响应回来的数据
含义
当收到 parser 端的响应数据时触发的回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onDownloaderMessage = function($downloader, $parser_reply){
print_r($parser_reply);
};
onBeforeDownload
参数
@param object $downloader 代表 downloader 实例
@param array $task 代表任务数组
含义
在任务下载之前触发此回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onBeforeDownload = function($downloader, $task){
$downloader->httpClient->setConnectTimeout(5);
$downloader->httpClient->setTransferTimeout(8);
};
onStartDownload
参数
@param object $downloader 代表 downloader 实例
@param array $task 代表任务数组
含义
在任务开始下载时触发此回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onStartDownload = function($downloader, $task){
};
onAfterDownload
参数
@param object $downloader 代表 downloader 实例
@param array $task 代表任务数组
含义
在任务下载之后触发此回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onAfterDownload = function($downloader, $task){
$downloader->setTaskCrawlInterval(2);
};
onFailDownload
参数
@param object $downloader 代表 downloader 实例
@param array $error 代表错误信息
@param array $task 代表任务数组
含义
在任务下载失败之后触发此回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onFailDownload = function($downloader, $error, $task){
print_r($error);
};
onTaskEmpty
参数
@param object $downloader 代表 downloader 实例
含义
在任务消费为空之后触发此回调。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->onTaskEmpty = function($downloader){
};
setName ( string $name ) : object
参数
@param string $name 代表downloader实例的名称,默认none。
说明
设置downloader实例的名称,只能是数字或字母或组合,最多15个字符。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->setName('downloader1');
setCount ( int $count, boolean $prepfer_by_cpu_cores = false ) : object
参数
@param int $count 代表downloader实例的进程数量,默认1。
@param boolean $prepfer_by_cpu_cores 根据CPU核数自动计算最优进程数,拥有最高优先级。
说明
设置downloader实例的进程数量。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->setCount(2); //设置启动2个进程。
$downloader->setCount(1, true); //假如是4核处理器,那么将启动8个进程。
setRouter ( Closure $router ) : object
参数
@param closure $router 路由回调函数
回调函数的参数
@param object $downloader 下载器实例
@param array $connections 下载器与解析器集群之间的长连接集合
$connections = [
'localhost:8888' => [$connection1, $connection2, ...., $connectionN];
'localhost:9999' => [$connection1, $connection2, ...., $connectionN];
......
];
含义
设置下载器到解析器集群之间的路由回调,
既可以路由至具体的解析器服务器,也可以路由至目标服务器上的某些连接。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
//比如:设置路由到特定的 parser 服务器:localhost:8888
$downloader->setRouter(function($downloader, $connections){
$_connections = [];
$target_server = 'localhost:8888';
foreach($connections as $server => $connection)
{
$server == $target_server && $_connections[$target_server] = $connection;
}
return $_connections;
});
setTaskCrawlInterval ( float $interval ) : object
参数
@param float $interval 爬取任务的间隔时间,单位:秒,最小支持0.001秒,默认1秒。
含义
设置消费任务的间隔时间,即:爬取任务的间隔时间。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
//设置爬取任务间隔时间为2秒
$downloader->setTaskCrawlInterval(2);
setSendBufferSize ( int $size ) : object
参数
@param int $size 发送缓冲区大小
含义
设置Downloader进程发送消息到Parser进程时的发送缓冲区大小,单位:字节;
本质上设置的是Downloader进程内所有异步任务连接的发送缓冲区大小,默认10M。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
//设置发送缓冲区大小为1M
$downloader->setSendBufferSize(102400);
setClientSocketAddress ( $address = '', $key = 'parser' ) : object
参数
@param string|array $address 目标socket地址
@param string $key 目标服务器标识
含义
当连接目标 socket 服务器时,根据key设置客户端对应 socket 地址。
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->setClientSocketAddress([
'ws://localhost:5555',
'ws://localhost:5556',
]);
appendClientSocketAddress ( $address = '', $key = 'parser' ) : object
参数
@param string|array $address 目标socket地址
@param string $key 目标服务器标识
含义
当连接目标 socket 服务器时,根据key追加客户端对应 socket 地址
举例
<?php
use PHPCreeper\Downloader;
$downloader = new Downloader;
$downloader->appendClientSocketAddress([
'ws://localhost:5555',
'ws://localhost:5556',
]);