php一个功能带来的高并发问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

php一个功能带来的高并发问题

2016-06-17 18:04:12 2416 2

有这样一个需求。用户想注册域名,但是呢,通常想的好的,都被人注册了。
这时候,程序自动的生成一定数量的域名,假设生成100个。然后在自动的查询
这100个域名是否被注册,从生成开始,域名就已经显示给了用户,然后
ajax来实时的更新每一个域名是否被注册的状态。

这时候,一个用户,就会带来100个并发查询,而且查域名状态,是需要连接whois服务器,有一个网络传输的过程
也就是这100个ajax查后台,就会带来100个php去发出whois的查询,等待结果,分析结果,返回给ajax调用

一般情况下,有几个用户同时一查。php的处理进程 就被占满了。整个站点的其他需要php实现都要处于等待状态了。。

这种情况下,要怎么优化呢?

我想的方案是:
1,将查询域名状态这事拿出去,放到另一个服务器上做。
2,查询域名状态不使用这种同步的方式,改用node.js这种异步模型的实现来做。

取消 提交回答
全部回答(2)
  • 落地花开啦
    2019-07-17 19:43:24

    你可以优化一下,不用每个用户都发送100个ajax请求,可以合并成一个ajax请求返回100个域名的状态。

    php后端根据要查询的100个域名并发(批量)向whois服务器请求数据,并发的获取结果。
    php并发(批量)http请求例子是这样的

    <?php
    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://whois.com/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt($ch2, CURLOPT_URL, "http://whois.com/");
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    $active = null;
    // 执行批处理句柄
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
    // 轮询Server返回的结果
    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) != -1) {
            do {
                $mrc = curl_multi_exec($mh, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }
    
    // 汇总结果......
    
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);

    这样能保证一个php进程并发的查询域名状态,而不是一个一个阻塞的去查,非常高效。设置超时时间,就不会导致进程因为网络io给阻塞占满了。

    0 0
添加回答
相关问答

1

回答

创建一个单独PHP文件,如何引用dedecms中模版文件?

2016-06-13 10:49:57 1592浏览量 回答数 1

3

回答

是不是php函数的问题

2016-07-10 12:44:55 4001浏览量 回答数 3

1

回答

如何用php获得一个空间里的所有文件名列表?

2016-06-17 15:29:22 1526浏览量 回答数 1

3

回答

oss内网问题求助(php)

2012-09-02 20:21:18 7875浏览量 回答数 3

1

回答

关于一个php正则替换问题

2016-03-09 11:52:17 1796浏览量 回答数 1

1

回答

php单例问题

2016-03-09 13:28:51 1830浏览量 回答数 1

1

回答

redis的php客户端为什么连接数这么大

2016-06-29 09:51:36 2099浏览量 回答数 1

1

回答

redis的php客户端为什么连接数这么大

2016-02-27 14:13:48 2272浏览量 回答数 1

1

回答

一个PHP类继承的问题:报错

2020-06-09 11:25:50 238浏览量 回答数 1

1

回答

为什么阿里云SMS服务的PHP sdk里包含了两千多个文件

2017-09-27 21:37:54 1522浏览量 回答数 1
+关注
落地花开啦
喜欢技术,喜欢努力的人
0
文章
7824
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载