1
tension 2013-06-08 14:36:31 +08:00
写缓存
|
2
qiuai OP @tension 每台服务器上都有缓存.但是是要激活才会有.总不能为了个不知道什么时候会看一次的信息列表去每分钟执行一次缓存吧...
|
3
swulling 2013-06-08 14:41:46 +08:00
并行抓啊,多线程
|
4
likexian 2013-06-08 14:42:29 +08:00
多线程,用python吧,相当简单
|
6
blacked 2013-06-08 15:14:40 +08:00
PHP CURL 并发 就可以了
|
7
txlty 2013-06-08 15:16:16 +08:00
1. 连续5次调用自身文件,每次调用指向不同探针,然后汇总
2. 用curl异步抓取。curl_multi_init() |
9
lyjyiran 2013-06-08 15:37:56 +08:00
|
11
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; ?> |
12
alsotang 2013-06-08 17:03:30 +08:00
异步抓或者多线程啊。
|
14
fmfsaisai 2013-06-08 18:22:01 +08:00
@qiuai 忍不住吐个槽,人家好心连代码都帮你实现了,你好歹认真读一下人家的代码吧
usleep(10000);你可以去看看手册usleep这个函数是干什么用的 直接上来一句就“一万次”....真是让人感觉无力。。。 |
15
qiuai OP |
16
darasion 2013-06-08 18:25:21 +08:00
|
18
fmfsaisai 2013-06-08 18:30:37 +08:00
@qiuai 这段代码对于你的需求来说应该还是有点问题的,如果还没发现,建议可以修改一下usleep的数值,比如改成0;
|
19
qiuai OP @fmfsaisai 执行以后出现了一些多余的数字.-1-1-1-1-1-1-1-1-1-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-100-100000-100-10
|
21
fmfsaisai 2013-06-08 18:37:17 +08:00
@qiuai
建议你先读读官方手册,result返回的只是一个状态码 http://php.net/manual/en/function.curl-multi-exec.php 如果想要获取返回的结果,(在所有exec执行完毕以后)要用 http://www.php.net/manual/en/function.curl-multi-getcontent.php 参数就用代码里循环的那个$ch[$i] for($i=0;$i<5;$i++){ echo curl_multi_getcontent($ch[$i]); } usleep改成0就是减少阻塞时间,对结果没有任何影响。 |
22
7sj525bL0Wy7FOx9 2013-06-08 18:46:02 +08:00
@qiuai 伸手党啊,多看看代码内容,自己测试下是哪里出的数字,再去看是哪个函数,再看看这个函数是什么用途,返回值等等,而不是等着别人回答啊亲,要自己多分析。
|