应用配置说明
[!WARNING|style:callout|label:注意事项|iconVisibility:default|labelVisibility:default|className:block-warning] 1、首先除了数据库配置文件以外,其余所有的配置文件都可以保持原始默认配置不动,
因为它是针对应用的一个默认全局初始化设置,完全可以在各个业务实例内部调用
setXXX方法实现同样的配置效果,这个在实际开发中应该使用几率较大且更灵活。
2、所有的配置文件都必须放到应用的Config目录下;
3、配置文件的名称必须和启动脚本的名称完全一致;
4、大部分选项都是可选的,至于必配项会在圆括号内加以特别说明,需要开发者特别留意;
0x01、每个应用默认都包含有四类配置文件:
- global.php: 全局配置文件,一般无需修改,除非有新增全局子配置文件。
- main.php: 全局子配置文件,主要用来配置和任务相关的参数。
- database.php:全局子配置文件,主要用来配置和数据库相关的参数。
- XXX.php:业务实例配置文件,XXX代表各个业务worker实例,全部位于应用各自的Config目录下。
0x02、每个业务worker实例各自拥有一个独立的配置文件:
假设我们为Weather应用编写了3个不同的业务worker实例,那么其对应的配置文件分别是:
/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppProducer.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppDownloader.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppParser.php
那么这3个业务worker实例对应的启动脚本分别如下:
/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppProducer.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppDownloader.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppParser.php
0x03、global.php
全局配置文件,一般无需修改,除非有新增全局子配置文件。
0x04、main.php
return array(
'language' => 'zh', //设置语言环境,目前暂支持中文和英文 (可选项,默认zh)
'multi_worker' => true, //是否启用多worker运作模式 (可选项,默认true)
'start' => array(
'AppProducer' => true, //是否启动AppProducer实例 (可选项,默认true)
'AppDownloader' => true, //是否启动AppDownloader实例 (可选项,默认true)
'AppParser' => true, //是否启动AppParser实例 (可选项,默认true)
'.........' => ...., //是否启动其他的worker实例 (愿意配哪个就配哪个)
),
'task' => array(
'method' => 'get', //HTTP请求方式 (可选项,默认get)
'crawl_interval' => 1, //任务爬取间隔,单位秒,最小支持0.001秒 (可选项,默认1秒)
'max_depth' => 1, //最大爬取深度, 0代表爬取深度无限制 (可选项,默认1)
'max_number' => 1000, //任务队列最大task数量, 0代表无限制 (可选项,默认0)
//当前Socket连接累计最大请求数,0代表无限制 (可选项,默认0)
//如果当前Socket连接的累计请求数超过最大请求数时,
//parser端会主动关闭连接,同时客户端会自动尝试重连
'max_request' => 1000,
'compress' => array(
'enabled' => true, //是否启用通信数据压缩 (可选项,默认true)
'algorithm' => 'gzip', //通信数据压缩算法,支持 gzip和deflate (可选项,默认gzip)
),
//限定爬取站点域,留空表示不受限
'limit_domains' => array(
),
//设定初始爬取URL,取值可以是字符串或数组,当配置为数组时 (必配项):
//key代表规则名称,和`rule`字段的key一一对应,主要用于快速索引目标数据集
//key也可以不设定,此时内部将使用 md5($task_url) 作为默认的规则名称
'url' => array(
"r1" => "http://www.weather.com.cn/weather/101010100.shtml",
"r2" => "http://www.weather.com.cn/weather/101010101.shtml",
"http://www.weather.com.cn/weather/101010100.shtml",
),
//注意:关于如何配置业务抽取规则,请移步 "抽取规则" 一节查看具体说明
//设置每条url对应的抓取规则,其中key和`url`字段的key配置一一对应 (必配项)
'rule' => array(
"r1" => [在此设定业务抓取规则],
"r2" => [在此设定业务抓取规则],
[在此设定业务抓取规则],
),
//设置发起http请求时的各种上下文参数 (可选项,默认空)
//引擎默认采用guzzle客户端,兼容支持guzzle所有的请求参数选项,具体参考guzzle手册
'context' => array(
//是否缓存下载数据(可选项,默认false)
'cache_enabled' => false,
//缓存下载数据存放目录 (可选项,默认位于系统临时目录下)
'cache_directory' => '/tmp/task/download/' . date('Ymd'),
),
),
);
0x05、database.php
全局子配置文件,主要用来配置和数据库相关的参数,其中针对redis的配置可支持一维或二维数组,如果省略,默认将连接 tcp://127.0.0.1:6379
服务器,基于爬虫应用特殊性和单一性,而且基本上主要用到队列服务,所以依赖redis的内核实现并不支持redis集群,但是支持redis分区。另注意:分布式或分离式部署时,必须保证所有的worker共享相同的配置。
<?php
return array(
'redis' => array(
'prefix' => 'Weather',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
'auth' => false, //当需要密码鉴权时,auth必须且只能配置为true
'pass' => 'guest', //当需要密码鉴权时,auth必须且只能配置为true
),
);
0x06、AppProducer.php
配置第一个生产器业务实例
<?php
return array(
'name' => 'producer1', //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级较高 (可选项,默认none)
'count' => 1, //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级较高 (可选项,默认1)
'interval' => 1, //生产任务的时间间隔,单位秒,最小支持0.001秒 (可选项,默认1秒)
);
0x07、AppDownloader.php
配置第一个下载器业务实例
<?php
return array(
'name' => 'downloader1', //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级高 (可选项,默认none)
'count' => 2, //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级高 (可选项,默认1)
//配置远程parser业务实例的socket地址,只能是一维数组或二维数组,即支持集群部署 (必配项)
'socket' => array(
'client' => array(
'parser' => array(
'scheme' => 'ws', //必须和远程parser业务实例监听的协议一致,默认ws
'host' => '127.0.0.1', //远程parser业务实例主机地址,默认127.0.0.1
'port' => 8888, //远程parser业务实例主机端口,默认8888
),
),
),
);
0x08、AppParser.php
配置第一个解析器业务实例
<?php
return array(
'name' => 'parser1', //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级高 (可选项,默认none)
'count' => 3, //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级高 (可选项,默认1)
//配置socket监听 (必配项)
'socket' => array(
'server' => array(
'scheme' => 'websocket', //默认websocket,支持frame、text以及自定义协议
'host' => '0.0.0.0', //默认0.0.0.0
'port' => 8888, //默认8888
),
),
);