如何在Linux环境下开启socket服务用于异步处理

大家好,我担任一家婚恋网站的维护工作,最近发现用户注册时越来越卡,我用log打出执行时间,如下程序段耗时5s:

           $url = "http://union.***.com/admin/index.php?c=timeflux&m=insertFlow&key=45846YL"."&uid=".$uid."&ip=".$ip."&gender=".$gender."&birthyear=".$birthyear."wf=union";;
           
@file_get_contents($url);

这段file_get_contents函数执行耗时,于是想到改用异步处理,代码如下:

           $host = "*.*.*.*";//ip地址
           $path
= "/index.php?c=timeflux&m=insertFlow&key=45846YL"."&uid=".$uid."&ip=".$ip."&gender=".$gender."&birthyear=".$birthyear."wf=union";
            $fp
= fsockopen($host, 80, $errno, $errstr, 30);
           
if (!$fp) {
               
print "$errstr ($errno)<br />\n";
               
exit;
           
}
            $out
= "GET ".$path." HTTP/1.1\r\n";
            $out
.= "Host: ".$host."\r\n";
            $out
.= "Connection: Close\r\n";
            fwrite
($fp, $out); //将请求写入socket
            fclose
($fp);

但是程序没有执行异步的操作,什么原因?怎么样测试socket服务开启成功,PHPinfo.php显示:Sockets Support:enable

感谢您为本话题评分。
共有2个回答
  • 0
    dudu - 2014-09-03 不喜欢

    file_get_contents函数慢的话,可以试下curl,效率比较高一些,排查一下原因。
    fsockopen 函数需要 PHP.ini 中开启 allow_url_fopen 选项,检查一下。

  • 0
    skytoblue - 2014-09-04 不喜欢

    @dudu 你好,allow_url_fopen是开启的,我试过用curl_exec同步处理,耗时也要5s,和file_get_contents一样,请问curl异步处理怎么做?curl_extc都是要返回值啊。。。

以下是预览效果,请确认排版好了再点回复。
如果你认为此话题有广告、灌水的嫌疑,请给此话题评一颗星。平均分低的话题将不会再显示。
良好的讨论氛围由大家共同维护。