求一个同时抓取多个文件的办法.

2013-06-08 14:31:17 +08:00
 qiuai
现在有5台服务器,每台服务器上有一个探针,每个探针执行时间约5秒.
如果挨个抓,就需要25秒.
有什么办法能够同时去抓这5台服务器的探针呢? 把时间缩短到5秒.
4588 次点击
所在节点    PHP
23 条回复
tension
2013-06-08 14:36:31 +08:00
写缓存
qiuai
2013-06-08 14:40:13 +08:00
@tension 每台服务器上都有缓存.但是是要激活才会有.总不能为了个不知道什么时候会看一次的信息列表去每分钟执行一次缓存吧...
swulling
2013-06-08 14:41:46 +08:00
并行抓啊,多线程
likexian
2013-06-08 14:42:29 +08:00
多线程,用python吧,相当简单
qiuai
2013-06-08 15:11:44 +08:00
@swulling PHP有多线程的办法?
@likexian =.=不会python.
blacked
2013-06-08 15:14:40 +08:00
PHP CURL 并发 就可以了
txlty
2013-06-08 15:16:16 +08:00
1. 连续5次调用自身文件,每次调用指向不同探针,然后汇总
2. 用curl异步抓取。curl_multi_init()
qiuai
2013-06-08 15:35:23 +08:00
lyjyiran
2013-06-08 15:37:56 +08:00
并行抓取不需要多线程, 用stream里的nonblock和select做就可以

或者可以试试这个 https://github.com/hightman/pspider
qiuai
2013-06-08 15:44:53 +08:00
@lyjyiran 谢谢~我看看~~
txlty
2013-06-08 16:43:00 +08:00
<?php
$t=array();$ch=array();
$t[]='http://www.baidu.com'; //探针1
$t[]='http://www.sogou.com'; //探针2
$t[]='http://www.yodao.com'; //探针3
$t[]='http://www.baidu.com'; //探针4
$t[]='http://www.sogou.com'; //探针5
for($i=0;$i<5;$i++){
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, $t[$i]);
curl_setopt($ch[$i], CURLOPT_HEADER, 0);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0);

}
$mh = curl_multi_init();
for($i=0;$i<5;$i++){
curl_multi_add_handle($mh,$ch[$i]);
}
$running=null;
do {
usleep(10000);
$result.= curl_multi_exec($mh,$running);
} while ($running > 0);
echo $result;
?>
alsotang
2013-06-08 17:03:30 +08:00
异步抓或者多线程啊。
qiuai
2013-06-08 18:18:26 +08:00
@txlty 这个....一万次?
@alsotang 就是不知道怎么实现...
fmfsaisai
2013-06-08 18:22:01 +08:00
@qiuai 忍不住吐个槽,人家好心连代码都帮你实现了,你好歹认真读一下人家的代码吧
usleep(10000);你可以去看看手册usleep这个函数是干什么用的
直接上来一句就“一万次”....真是让人感觉无力。。。
qiuai
2013-06-08 18:24:05 +08:00
@fmfsaisai =.=sorry.我之前百度的时候看到了一段跟这个差不多的代码.介绍里说是执行了一万次什么的...我PHP只是入门...

@txlty 对不起...我马上去测试一下...谢谢.
darasion
2013-06-08 18:25:21 +08:00
php 有多进程.

比如:
pcntl_fork();
http://www.php.net/manual/en/function.pcntl-fork.php

另外楼上各种办法基本都可以试试。
qiuai
2013-06-08 18:28:31 +08:00
@darasion 嗯.好的...我正在测试 @txlty 的方法中
fmfsaisai
2013-06-08 18:30:37 +08:00
@qiuai 这段代码对于你的需求来说应该还是有点问题的,如果还没发现,建议可以修改一下usleep的数值,比如改成0;
qiuai
2013-06-08 18:31:39 +08:00
@fmfsaisai 执行以后出现了一些多余的数字.-1-1-1-1-1-1-1-1-1-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-100-100000-100-10
qiuai
2013-06-08 18:33:06 +08:00
@fmfsaisai 改成0也是会有很多不知道是什么意思的数字...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/71708

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX