Parser类
此类扮演的是解析器的角色,以下列举的是其常用的回调API以及普通API。
onParserStart
参数
@param object $parser 代表 parser 实例
含义
1. 设置Parser子进程启动时的回调函数,每个子进程启动时都会执行。
2. 回调属性 onParserStart 是在子进程启动时运行的,总共会运行 $parser->count 次。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->onParserStart = function($parser){
echo "{$parser->id}号解析器进程启动成功";
};
onParserStop
参数
@param object $parser 代表 parser 实例
含义
1. 设置Parser子进程停止时的回调函数,每个子进程停止时都会执行。
2. 回调属性 onParserStop 是在子进程停止时运行的,总共会运行 $parser->count 次。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->onParserStop = function($parser){
echo "{$parser->id}号解析器进程停止成功";
};
onParserReload
参数
@param object $parser 代表 parser 实例
含义
此回调属性不常用到,用于设置解析器收到reload信号后执行的回调。
说明:
利用onParserReload回调做很多事情,例如在不需要重启进程的情况下重新加载业务配置文件。
子进程收到reload信号默认的动作是退出重启,以便新进程重新加载业务代码完成代码更新。
所以reload后子进程在执行完onParserReload回调后便立刻退出是正常现象。
如果在收到reload信号后只想让子进程执行onParserReload而不想退出,可以在初始化
Parser实例时设置对应的Parser实例的reloadable属性为false。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
//设置reloadable为false,即子进程收到reload信号不执行重启
$parser->reloadable = false;
$parser->onParserReload = function($parser){
};
onParserExtractField
参数
@param object $parser 代表 parser 实例
@param string $download_data 代表下载得到的源数据
@param array $fields 代表成功提取的字段集
含义
当成功提取到符合业务规则的预期数据时触发此回调
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->onParserExtractField = function($parser, $download_data, $fields){
print_r($fields);
};
onParserFindUrl
参数
@param object $parser 代表 parser 实例
@param string $sub_url 代表提取到的子URL
含义
当成功提取到子URL时触发此回调
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->onParserFindUrl = function($parser, $sub_url){
return $sub_url;
};
onParserMessage
参数
@param object $parser 代表 parser 实例
@param object $connection 代表 connection 实例
@param string $download_data 代表下载得到的源数据
含义
当接收到 downloader 发来的下载源数据时触发此回调
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->onParserMessage = function($parser, $connection, $download_data){
};
setName ( string $name ) : object
参数
@param string $name 代表parser实例的名称,默认none。
说明
设置parser实例的名称,只能是数字或字母或组合,最多15个字符。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->setName('parser1');
setCount ( int $count, boolean $prepfer_by_cpu_cores = false ) : object
参数
@param int $count 代表parser实例的进程数量,默认1。
@param boolean $prepfer_by_cpu_cores 根据CPU核数自动计算最优进程数,拥有最高优先级。
说明
设置parser实例的进程数量。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->setCount(2); //设置启动2个进程。
$parser->setCount(1, true); //假如是4核处理器,那么将启动8个进程。
setSendBufferSize ( int $size ) : object
参数
@param int $size 发送缓冲区大小
含义
设置Parser进程发送消息到Parser进程时的发送缓冲区大小,单位:字节。
本质上设置的是Parser进程内所有异步任务连接的发送缓冲区大小,默认10M。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
//设置发送缓冲区大小为1M
$parser->setSendBufferSize(102400);
setServerSocketAddress ( string $address ) : object
参数
@param string $address 完整的 socket 地址
参数格式
$address 的格式为 <通信协议>://<监听地址>
<通信协议> 可以为以下格式或者任何自定义协议:
tcp: 例如: tcp://0.0.0.0:8888
udp: 例如: udp://0.0.0.0:8888
unix: 例如: unix:///tmp/my_file (需要 workerman >= 3.2.7)
text: 例如: text://0.0.0.0:8888
frame: 例如: frame://0.0.0.0:8888
websocket:例如: websocket://0.0.0.0:8888
<监听地址> 可以为以下格式:
如果是unix套接字,地址为本地一个磁盘路径
非unix套接字,地址格式为 <本机ip>:<端口号>
<本机ip>可以为0.0.0.0表示监听本机所有网卡,包括内网ip和外网ip及本地回环127.0.0.1
<本机ip>如果以为127.0.0.1表示监听本地回环,只能本机访问,外部无法访问
<本机ip>如果为内网ip,类似192.168.xx.xx,表示只监听内网ip,则外网用户无法访问
<本机ip>设置的值不属于本机ip则无法执行监听,并且提示Cannot assign requested address错误
含义
1. 设置监听socket。
2. 端口号不能大于65535,端口号如果小于1024则需要root权限才能监听。
3. 端口必须是本机未被占用的端口,否则无法监听,并且提示 Address already in use 错误。
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$parser->setServerSocketAddress('websocket://0.0.0.0:8888');
setServerSocketContext ( array $context = [] ) : object
参数
@param array $context 代表 socket 上下文选项
含义
设置 socket 上下文选项
举例
<?php
use PHPCreeper\Parser;
$parser = new Parser;
$context = array(
'ssl' => array(
'local_cert' => '/paht/to/cert.crt',
'local_pk' => '/path/to/cert.key',
'verify_peer' => false,
'allow_self_signed' => true,
)
);
$parser = new Parser();
$parser->setServerSocketContext($context);