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);
Free Web Hosting