예제 #1
0
 * 1、协调crawler和parser工作 
 * 2、由于swoole的特殊性,所有是回调函数的形式
 * 3、定义了监控器
 *
 **/
//定义一些全局变量
global $crawler_monitor, $parser_monitor, $redis, $crawler_server, $parser_server, $crawler_topic, $parser_topic, $start;
//加载site配置,里面包含了要抓取的网站列表及相应的配置,请看测试实例
$site = Loader::load_config('site');
if (!$site && !isset($site['urls']) && !$site['urls']) {
    exit('没有定义要抓取的网站列表');
} else {
    $urls = is_array($site['urls']) ? $site['urls'] : array($site['urls']);
}
//初始化redis
$redis = init_redis();
$crawl_keys = $parse_keys = array();
//把要抓取的网站添加的要监控的队列
foreach ($urls as $url) {
    preg_match('/http:\\/\\/[^\\/]+[\\/]?/i', $url, $match);
    if (!$match) {
        continue;
    }
    $key = md5(trim($match[0], '/'));
    /**
     * $start 参数
     * 1、因为本系统必须启动连个server才能完成想要的效果 crawer_server 和 parser_server
     * 2、每次启动server都会加载该文件
     * 3、避免重复放入队列(比如第一次在队列中时,我们的crawer_server已经抓取过了,如果重复放入,则会重复抓取)
     **/
    if ($start) {
예제 #2
0
 function host_to_ip($host)
 {
     $redis = init_redis();
     $key = 'dnscachehost_to_ip';
     $ips = array();
     if (!($ips = $redis->hget($key, md5($host)))) {
         Loader::load('lib.dns.DNSRecord');
         $records = DNSRecord::get_records($host);
         if ($records) {
             $ips = serialize(array_column($records, 'ip'));
         }
     }
     if ($ips) {
         $redis->hset($key, md5($host), $ips);
         $ips = unserialize($ips);
         return $ips[rand(0, intval(count($ips) - 1))];
     }
 }