乌云博客
专注互联网三十年

Qzone空间背景API接口开放测试中

小桑、阅读(1514)

2697535369

最近发现Qzone的登录页面背景好好看啊…而且支持https,于是就写了个api方便调用!
注意哦~!目前我并不知道背景图的更新规律,也就是说不知道它几天更新一次或者一年才更新一次…

目前api调用有三种方式:

1.直接请求http://lab.dobyi.com/api/background.php,返回图片

2.请求http://lab.dobyi.com/api/background.php?api=http,返回json(http版)

3.请求http://lab.dobyi.com/api/background.php?api=https,返回json(https版)

注:lab.dobyi.com已支持SSL,您还可以https://lab.dobyi.com/api/background.php

科♂学♂的来获取国内域名商的转移密码

小桑、阅读(1607)

在西部数码看到非常实用的文章!国内注册商有这么良心的没几个了!

域名转移注册商时必须向原注册商索取到 转移密码(auth-code)才能进行。像Godaddy等国外注册商,一般在控制面板上就可以直接点击一个按钮发送auth-code到域名所有人的邮箱之中,国内的注册商一般都没有自由获取转移密码的功能,需要联系注册商或之前注册域名的代理商,人工索取转移密码,或提出要进行域名转出。这样原注册商一般会给出相应的处理流程。

如果原来是通过万网、新网等注册商的代理商购买的域名,如果代理商不给转移密码,可以先向万网等 注册商直接投诉,如果注册商也不配合处理再向ICANN、CNNIC等注册局投诉。

按照域名相关管理机构的规定(ICANN域名转移政策),原注册商不能擅自拒绝或限制域名的转出,也不能以任何名义对域名转出额外收取费用; 如果原注册商以各种名义阻拦域名转出或要求对域名转出收费的,

域名持有者可以按照以下方式进行投诉;
国际域名投诉地址:http://www.icann.org/en/resources/compliance/complaints/transfer/form (对英文不熟悉的详见后文的帮助)

国内域名投诉方式: 投诉邮箱为supervise@cnnic.cn,投诉电话为010-58813000
(国内域名转移,部分注册商要求邮寄转移申请表、身份证、营业执照复印件等资料才给转移密码。针对这种故意阻止转移的行为,可以联系CNNIC进行投诉 投诉邮箱为supervise@cnnic.cn,投诉电话为010-58813000 。 投诉邮件中请注明你的域名,并附上身份证、营业执照扫描件等资料,以便证明你是该域名的所有者,并且用域名所有者的邮箱来发邮件。 目前万网、西部数码等注册商不要求邮寄原件,直接在线上传资料即可转移域名,其他部分注册商要求邮寄原件以阻拦转移)

以下是国际域名的投诉流程,一般投诉几天后即可收到转移密码。

![589a44c5a9e79cbe246899511597ed66.jpg][1]

ICANN域名投诉

在域名转移注册服务商时,遇到原来的注册商拒绝转移的,或者以各种理由阻止转移,涉及国际域名的问题都可以在ICANN投诉。一般说来因为ICANN根据用户投诉有权取消注册商资格或进行处罚,所以投诉是相当见效的。通过在线提交问题投诉注册服务商的方式可以获取转移授权码,投诉网页中填写的情况说明需提交英文版,可以参照模板格式修改对应的信息使用。

一、登录ICANN官方网站转移表单提交投诉
ICANN投诉网址:
http://www.icann.org/en/resources/compliance/complaints/transfer/form

1、填写基本信息,标注*号的为必填
![4e3180f097765a2fbb6687dd542fab17.gif][2]
填写ICANN域名投诉信息
* Name 姓名,必须填写
Organization(if any) 组织机构,非必填。
* Email address必须填写电邮地址方便注册商(regestrar)联系,必须用whois信息中域名所有人的邮箱。
Phone number(optional) 填写电话号码,非必填。
* Domain name必须填写 投诉的域名,如abc.com ,注意不用填www. (上图示例有错)。 此处只能填写单个,提交时系统会自动查询注册商

2、Indicate the reason(s) 选择投诉的问题类型,选域名转移中遇到的相关的问题。
![fcd6c4c14229b243967551b60d9deba9.gif][3]
My registrar blocked the transfer because I did not pay the transfer fee.
注册商拒绝转移,因为我没有支付转移费用。 (如果原注册商要求收取转移费用或必须续费一年才给转,就选择上这一项)

The registrar blocked the transfer because I have not paid for a pending or future registration period.
注册商拒绝转移,因为我没有支付到期前的注册费用。
My domain name has not expired and the registrar requested it be renewed prior to the transfer.
我的域名没有过期,注册商要求在转移之前续费。

I am the Registered Name Holder and my email address is listed as the registrant’s in the registration information, but the registrar requested proof of my identity
我使用姓名和邮件地址与登记注册信息一致,但注册商还要求我提供身份证明。(一般勾选这一个即可)

The registrar blocked the transfer because there are payment defaults between the registrar and the reseller through which the domain was registered.
注册商拒绝转移,代理商和注册商之间存在支付违约问题。
The domain name is locked and the registrar did not update the status and did not provide me with means to update it.
域名被锁定,注册商不更新解锁状态。
My registrar blocked the transfer saying that the domain name was created less than 60 days ago, or that it was transferred to my registrar less than 60 days ago.
注册商拒绝转移,理由是域名注册不到60天,或刚转移不到60天。。
Other.
其他的情况。

3、Please indicate which of the following you have completed in working with your current or losing registrar: 请说明当前域名转移处理情况,这里分两个部分选择相应问题说明
![7c9cd9c0b49bcb5e3b003b5a4f7fcb2d.gif][4]
Regarding the authorization code (auth-code) * 关于转移授权码

I tried to retrieve the auth-code from my control panel. 我尝试了从控制面板获取转移码
I asked the registrar to provide me the auth-code, but it was not sent within the 5 days following my request. 我请求域名注册商提供授权码,但是在我提出请求后5天内未发送。 (一般选这一项,因为国内域名注册商的控制面板中一般都没有获取转移授权码的功能!)

Regarding the lock status * 关于锁定状态

I already tried to unlock the domain name myself. 我已经尝试自己解锁域名。
I asked the registrar to unlock it, but the domain was not unlocked nor did I receive means to unlock it myself. 我请求域名注册商解锁,但是域名未被解锁,我也未得到如何自助解锁的方法 (一般选中这一项即可)

4、Please provide additional comment or details
写上您的投诉事件简要描述即可。(内容见下面的二个模板)
![556c6fcbc01ae0bc8c4de4f7dc2878d9.gif][5]
最好把问题写清楚简要。然后点submit提交即可

A英文信模板(括号中文为替换文本说明标注,替换为相应内容删除中文即可):
Hello,
I registered my domain mydoname.com (注册域名)at xxx(注册商,whois中Registrar,如果不清楚,可以不填这一项). I am not satisfied with their service and I want to transfer my domain to other.
I can’t find any place on their site to get my Auth-code. Followed their FAQ, I found they require a paper form to be filled and mailed to their office with a hard copy of my official personal photo ID or/and passport. I feel very uncomfortable about this. I don’t think they has authority to check my personal id and keep a hard copy, it contains lot of my privacy info. I believe this requirement is against both ICANN policy and local law.
Please help me getting my Auth-code from them.
Thanks.

B英文信模板:域名代理商拒绝并要求续费
Hello
Im a Chinese people and bought a domain mydoname.com(注册域名) in 20xx.
I decided to transfer my domain to west263.com for the better service and lower renew price.
But the agent xxx(注册商)and its agent xxxx.xx(代理商) dont provide the auth-code to me. They ask me to renew the domain first which will cost me xx RMB and 60 days.I think I’m the domain owner and I have the right of transfering my domain by free。 But many domain agents in China (not only xxx)always set up many check points and collect fees to avoid customers transfering domain out of them。
Please ask xxx。com send the auth-code of mydoname.com to it’s owner email and regulate the behavior of Chinese agents。
Thanks

二、大概1-5天内,即可收到注册商的回复邮件。

一般情况,域名注册商直接提供域名的转移授权码。
如遭遇原域名注册服务商阻拦,可以再次向ICANN投诉。投诉间隔一般最长不超过7天,最短不要小于2-3天,需要关注注册商工作时间,避免非工作时间处理延时。
若5天后没有收到密码可以按照以下模板继续申请:

Hello
This is the second complaint letter sent.
I registered my domain mydoname.com (注册域名)at xxx(注册商,whois中Registrar). I am not satisfied with their service and I want to transfer my domain to other.
I can’t find any place on their site to get my Auth-code.
……

三、关联百科

•域名所有人名称前期填写错误是可以修改的,所有人电子邮件地址必须是正确可用的。
•使用域名whois信息上所有人或管理人的邮箱地址填写报告或投诉,以此证明管理身份。
•获取到转移密码要及时转移,如果域名被锁定(lock 或 hold状态),时间过了转移密码也会失效。

•auth-code是域名授权码,即通常说的转移密码,不等同于域名管理密码。

四、属于合理拒绝的情况:

•欺诈行为的证据
•统一域名争议解决政策(UDRP)处理
•法庭或仲裁机构作出的裁定
•合理授权转让人存在争议
•域名持有人前期注册费用欠款
•域名持有人提交了书面异议
•域名是“锁定”状态(需登记名称持有人提供合理理由解除锁定状态。)
•域名初始注册时间未满60天或刚转移未满60天。

[1]: http://7tsyvm.com1.z0.glb.clouddn.com/2015/12/528755129.jpg
[2]: http://7tsyvm.com1.z0.glb.clouddn.com/2015/12/3397209180.gif
[3]: http://7tsyvm.com1.z0.glb.clouddn.com/2015/12/2959296358.gif
[4]: http://7tsyvm.com1.z0.glb.clouddn.com/2015/12/628366328.gif
[5]: http://7tsyvm.com1.z0.glb.clouddn.com/2015/12/3307626601.gif

小米小钢炮不能开机但充电亮灯的解决方法

小桑、阅读(1943)

549bcc52Nfd589d99
这渣渣小米,我姐的2s因为主板问题导致屏幕花屏,刚开始以为是屏幕的原因,却没想到是主板!
不容易的我入个小米小钢炮,刚开始不错,尼玛,玩了几次之后不能开机了!
长按什么键都不行!充电可以但充好几次也无法开机!
于是各种客服各种百度啊,终于在某贴中的某回复中找到了解决方法!

我也遇到了这种问题 捣鼓了一下午终于找到原因了 其实这种情况与手机死机一样 当我们手机死机的时候我们会拆下电池来重启 小米小钢炮用同样的方法就可以解决 把低音炮拆开 重新焊接一下电源线 使其断一下电 再开机就好了

尼玛!小钢炮竟会死机!于是我拆开重接了电源线,真的能开机了!

Typecho单栏小清新优雅主题Doby Tsin Theme

小桑、阅读(2165)

Doby Tsin Theme


主题的名字Doby Tsin来源于:千歲君的貓電磁炮 博客,这个主题整体架构仿自此网站,原主题是付费wordpress主题,但主题很好看,于是被我移植到Typecho上来了。嘘……注意哦!本主题尚未征求原作者意见,所以千万不要告诉他!!!


主题特色

1.小清新又高大上,非常优雅的全平台自适应单栏主题

2.完美移植其主题特色:评论框,很好看哦!

Doby Tsin Theme Comments


下载

点击下载Doby Tsin Theme | 小钥匙:g2ia

注意里面还有一个主题推荐插件包(GravatarShow),此插件是用于Gravatar头像(评论处头像)因被墙无法查看而制作的一款插件!具体使用方法:http://blog.dobyi.com/GravatarShow.html


使用前必读

1.若需要安装GravatarShow头像显示插件,方法请点击:http://blog.dobyi.com/GravatarShow.html

2.下载百度盘内的[TE]Doby Tsin Theme.zip并解压,把文件夹(dobyi)上传到/usr/themes目录,然后进入控制台-外观-启用主题。

3.本主题支持网站公告内容显示,请在控制台-外观-设置外观中更改公告内容。

4.保留底部作者版权链接是对免费开源主题最基本的支持。


版本更新

2015.06.02 发布V1.0版本


特别鸣谢 & 版权说明

主题原作者千歲君的貓電磁炮,主题移植者Doby,感谢你们让这个主题变得完美。

Gravatar头像被墙显示插件(GravatarShow) For Typecho 纯净版

小桑、阅读(1583)

GravatarShow

呐,最近博主都没怎么发文章嘞,学业繁忙ing……都没功夫照顾博客!

于是今天先发布一款插件:GravatarShow,一款纯净的Gravatar头像显示插件。

插件优点:

  1. 免配置直接启用,无需更改Typecho系统文件,方便Typecho升级,免去升级后需要再次修改!
  2. 采用未被屏蔽的官方Gravatar头像地址(https),稳定好用!
  3. 无其他插件的头像缓存功能,单纯的将原被墙地址换为未被屏蔽的地址,非常纯净!
  4. 这款插件也是为了之后的一款新主题做铺垫哦!(推荐主题:Typecho单栏简洁大气主题Doby Kunr Theme)

使用方法:

  1. 下载GravatarShow.php,上传至/usr/plugins文件夹内
  2. 登录Typecho博客后台,顶部导航栏-控制台-插件-找到GravatarShow-启用
  3. 大功告成!试试Gravatar头像能否显示了吧!

下载地址:

链接:http://pan.baidu.com/s/1c0tqvNq 密码:ikap

基于WebQQ协议在线的AndroidQQ

小桑、阅读(2859)

因为大家都知道WebQQ协议可以当作PC在线,所以可用于加速电脑活跃天数,适用于手机党们~而且有聊天的功能哦!安装包仅1.33MB,欢迎使用!如果怕有后门之类,可以使用LBE、解apk、抓包来查看!

SangQQ是基于MingQQ项目做的改动:1.修复启动图在高ppi下仍未满屏问题;2.更改后台挂机图标;3.优化相关字段;4.更改动态中的说明主用于挂Q

下载地址:http://pan.baidu.com/s/1kT434gv

android-WebQQ

PHP CURL 多线程 GET/POST 类

小桑、阅读(3839)

如果有需要更正或更高效的建议,欢迎在OSchina分享~\(≧▽≦)/~

http://www.oschina.net/code/snippet_1475115_44902

<?php
/****************************************************************
                    PHP CURL 多线程 GET/POST              
Email:szj1006@vip.qq.com/QQ:690204663                  
Powered by XiaoSang      
curl(array('url?get=data','url'),array('','post_data')); 
*****************************************************************/ 
function curl($urls,$post) {
     $queue = curl_multi_init();
     $map = array();
     foreach ($urls as $key => $url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post[$key]);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOSIGNAL, true);
        curl_multi_add_handle($queue, $ch);
        $map[(string) $ch] = $url;
    }
    $responses = array();
    do {
        while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM) ;
        if ($code != CURLM_OK) { break; }
        while ($done = curl_multi_info_read($queue)) {
            $error = curl_error($done['handle']);
            $results = curl_multi_getcontent($done['handle']);
            $responses[$map[(string) $done['handle']]] = compact('error', 'results');
            curl_multi_remove_handle($queue, $done['handle']);
            curl_close($done['handle']);
        }
        if ($active > 0) {
            curl_multi_select($queue, 0.5);
        }
    } while ($active);
    curl_multi_close($queue);
    return $responses;
}

Rolling cURL: PHP并发最佳实践

小桑、阅读(3395)

在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发.

 

本文将探讨两种具体的实现方法, 并对不同的方法做简单的性能对比.

 

1. 经典cURL并发机制及其存在的问题

经典的cURL实现机制在网上很容易找到, 比如参考PHP在线手册的如下实现方式:

function classic_curl($urls, $delay) {

$queue = curl_multi_init();

$map = array();

 

foreach ($urls as $url) {

// create cURL resources

$ch = curl_init();

 

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, $url);

 

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_NOSIGNAL, true);

 

// add handle

curl_multi_add_handle($queue, $ch);

$map[$url] = $ch;

}

 

$active = null;

 

// execute the handles

do {

$mrc = curl_multi_exec($queue, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

 

while ($active > 0 && $mrc == CURLM_OK) {

if (curl_multi_select($queue, 0.5) != -1) {

do {

$mrc = curl_multi_exec($queue, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

}

}

 

$responses = array();

foreach ($map as $url=>$ch) {

$responses[$url] = callback(curl_multi_getcontent($ch), $delay);

curl_multi_remove_handle($queue, $ch);

curl_close($ch);

}

 

curl_multi_close($queue);

return $responses;

}

首先将所有的URL压入并发队列, 然后执行并发过程, 等待所有请求接收完之后进行数据的解析等后续处理. 在实际的处理过程中, 受网络传输的影响, 部分URL的内容会优先于其他URL返回, 但是经典cURL并发必须等待最慢的那个URL返回之后才开始处理, 等待也就意味着CPU的空闲和浪费. 如果URL队列很短, 这种空闲和浪费还处在可接受的范围, 但如果队列很长, 这种等待和浪费将变得不可接受.

 

2. 改进的Rolling cURL并发方式

仔细分析不难发现经典cURL并发还存在优化的空间, 优化的方式时当某个URL请求完毕之后尽可能快的去处理它, 边处理边等待其他的URL返回, 而不是等待那个最慢的接口返回之后才开始处理等工作, 从而避免CPU的空闲和浪费. 闲话不多说, 下面贴上具体的实现:

function rolling_curl($urls, $delay) {

$queue = curl_multi_init();

$map = array();

 

foreach ($urls as $url) {

$ch = curl_init();

 

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_NOSIGNAL, true);

 

curl_multi_add_handle($queue, $ch);

$map[(string) $ch] = $url;

}

 

$responses = array();

do {

while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM) ;

 

if ($code != CURLM_OK) { break; }

 

// a request was just completed — find out which one

while ($done = curl_multi_info_read($queue)) {

 

// get the info and content returned on the request

$info = curl_getinfo($done[‘handle’]);

$error = curl_error($done[‘handle’]);

$results = callback(curl_multi_getcontent($done[‘handle’]), $delay);

$responses[$map[(string) $done[‘handle’]]] = compact(‘info’, ‘error’, ‘results’);

 

// remove the curl handle that just completed

curl_multi_remove_handle($queue, $done[‘handle’]);

curl_close($done[‘handle’]);

}

 

// Block for data in / output; error handling is done by curl_multi_exec

if ($active > 0) {

curl_multi_select($queue, 0.5);

}

 

} while ($active);

 

curl_multi_close($queue);

return $responses;

}

3. 两种并发实现的性能对比

改进前后的性能对比试验在LINUX主机上进行, 测试时使用的并发队列如下:

 

http://item.taobao.com/item.htm?id=14392877692

http://item.taobao.com/item.htm?id=16231676302

http://item.taobao.com/item.htm?id=17037160462

http://item.taobao.com/item.htm?id=5522416710

http://item.taobao.com/item.htm?id=16551116403

http://item.taobao.com/item.htm?id=14088310973

简要说明下实验设计的原则和性能测试结果的格式: 为保证结果的可靠, 每组实验重复20次, 在单次实验中, 给定相同的接口URL集合, 分别测量Classic(指经典的并发机制)和Rolling(指改进后的并发机制)两种并发机制的耗时(秒为单位), 耗时短者胜出(Winner), 并计算节省的时间(Excellence, 秒为单位)以及性能提升比例(Excel. %). 为了尽量贴近真实的请求而又保持实验的简单, 在对返回结果的处理上只是做了简单的正则表达式匹配, 而没有进行其他复杂的操作. 另外, 为了确定结果处理回调对性能对比测试结果的影响, 可以使用usleep模拟现实中比较负责的数据处理逻辑(如提取, 分词, 写入文件或数据库等).

 

性能测试中用到的回调函数为:

function callback($data, $delay) {

preg_match_all(‘/<h3>(.+)<\/h3>/iU’, $data, $matches);

usleep($delay);

return compact(‘data’, ‘matches’);

}

数据处理回调无延迟时: Rolling Curl略优, 但性能提升效果不明显.

 

————————————————————————————————

Delay: 0 micro seconds, equals to 0 milli seconds

————————————————————————————————

Counter         Classic         Rolling         Winner          Excellence      Excel. %

————————————————————————————————

1               0.1193          0.0390          Rolling         0.0803          67.31%

2               0.0556          0.0477          Rolling         0.0079          14.21%

3               0.0461          0.0588          Classic         -0.0127         -21.6%

4               0.0464          0.0385          Rolling         0.0079          17.03%

5               0.0534          0.0448          Rolling         0.0086          16.1%

6               0.0540          0.0714          Classic         -0.0174         -24.37%

7               0.0386          0.0416          Classic         -0.0030         -7.21%

8               0.0357          0.0398          Classic         -0.0041         -10.3%

9               0.0437          0.0442          Classic         -0.0005         -1.13%

10              0.0319          0.0348          Classic         -0.0029         -8.33%

11              0.0529          0.0430          Rolling         0.0099          18.71%

12              0.0503          0.0581          Classic         -0.0078         -13.43%

13              0.0344          0.0225          Rolling         0.0119          34.59%

14              0.0397          0.0643          Classic         -0.0246         -38.26%

15              0.0368          0.0489          Classic         -0.0121         -24.74%

16              0.0502          0.0394          Rolling         0.0108          21.51%

17              0.0592          0.0383          Rolling         0.0209          35.3%

18              0.0302          0.0285          Rolling         0.0017          5.63%

19              0.0248          0.0553          Classic         -0.0305         -55.15%

20              0.0137          0.0131          Rolling         0.0006          4.38%

————————————————————————————————

Average         0.0458          0.0436          Rolling         0.0022          4.8%

————————————————————————————————

Summary: Classic wins 10 times, while Rolling wins 10 times

数据处理回调延迟5毫秒: Rolling Curl完胜, 性能提升40%左右.

 

————————————————————————————————

Delay: 5000 micro seconds, equals to 5 milli seconds

————————————————————————————————

Counter         Classic         Rolling         Winner          Excellence      Excel. %

————————————————————————————————

1               0.0658          0.0352          Rolling         0.0306          46.5%

2               0.0728          0.0367          Rolling         0.0361          49.59%

3               0.0732          0.0387          Rolling         0.0345          47.13%

4               0.0783          0.0347          Rolling         0.0436          55.68%

5               0.0658          0.0286          Rolling         0.0372          56.53%

6               0.0687          0.0362          Rolling         0.0325          47.31%

7               0.0787          0.0337          Rolling         0.0450          57.18%

8               0.0676          0.0391          Rolling         0.0285          42.16%

9               0.0668          0.0351          Rolling         0.0317          47.46%

10              0.0603          0.0317          Rolling         0.0286          47.43%

11              0.0714          0.0350          Rolling         0.0364          50.98%

12              0.0627          0.0215          Rolling         0.0412          65.71%

13              0.0617          0.0401          Rolling         0.0216          35.01%

14              0.0721          0.0226          Rolling         0.0495          68.65%

15              0.0701          0.0428          Rolling         0.0273          38.94%

16              0.0674          0.0352          Rolling         0.0322          47.77%

17              0.0452          0.0425          Rolling         0.0027          5.97%

18              0.0596          0.0366          Rolling         0.0230          38.59%

19              0.0679          0.0480          Rolling         0.0199          29.31%

20              0.0657          0.0338          Rolling         0.0319          48.55%

————————————————————————————————

Average         0.0671          0.0354          Rolling         0.0317          47.24%

————————————————————————————————

Summary: Classic wins 0 times, while Rolling wins 20 times

通过上面的性能对比, 在处理URL队列并发的应用场景中Rolling cURL应该是更加的选择, 并发量非常大(1000+)时, 可以控制并发队列的最大长度, 比如20, 每当1个URL返回并处理完毕之后立即加入1个尚未请求的URL到队列中, 这样写出来的代码会更加健壮, 不至于并发数太大而卡死或崩溃. 详细的实现请参考: http://code.google.com/p/rolling-curl/

 

5. 参考资料和延伸阅读

Client URL Library http://www.php.net/manual/en/book.curl.php

Parallel CURL Requests with PHP http://blog.rob.cx/multi-curl

A more efficient multi-curl library for PHP (non-blocking) http://code.google.com/p/rolling-curl/

PHP: Parallel cURL Performance http://stackoverflow.com/questions/10485199/php-parallel-curl-performance-rollingcurl-vs-parallelcur

[php]自动更新google的hosts轻松访问谷歌

小桑、阅读(2878)

加个开机运行的任务计划,完美。。

 

<?php
$hostsFile = “C:/Windows/System32/drivers/etc/hosts”;
$RegExp = ‘/#google hosts [0-9]+ by 360kb.com[\s\S]+#google hosts [0-9]+ end/’;

$html = strip_tags(file_get_contents(‘http://www.360kb.com/kb/2_122.html’));

preg_match($RegExp, $html, $matchs);
$googleHosts = str_replace(‘&nbsp;’, ‘ ‘, $matchs[0]);
//echo $googleHosts;

$hosts = file_get_contents($hostsFile);

if(preg_match($RegExp, $hosts)){
$hosts = preg_replace($RegExp, $googleHosts, $hosts);
}else{
$hosts .= “\r\n\r\n”.$googleHosts.”\r\n\r\n”;
}

file_put_contents($hostsFile, $hosts);