海运的博客

PHP异步执行

发布时间:December 31, 2013 // 分类:PHP // No Comments

<?php
   $start = microtime(true); 
   $fp=fsockopen('localhost',80,$errno,$errstr,5);
   if(!$fp){
      echo "$errstr ($errno)<br />\n";
   }
   $head = "GET /get.php HTTP/1.1 \r\n";
   $head .= "Host: localhost \r\n";
   $head .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0 \r\n";
   $head .= "Connection: Close \r\n\r\n";
   //发送请求
   fputs($fp,$head);
   /* 忽略结果
   while(!feof($fp)) {
      echo fgets($fp,128);
   }
   */
   fclose($fp);
   header("Content-Type: text/html;charset=utf-8");
   $end = microtime(true); 
   echo "脚本执行时间".($end - $start).'<br>';  
?>

异步执行的代码:

<?php
   ignore_user_abort(1); //由于异步请求后会立即断开连接,默认会终止脚本,忽略掉
   set_time_limit(0); //取消脚本执行延时上限
   for ($i = 1; $i < 10; $i++)
   {
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, "http://www.haiyun.me/?$i");
      curl_setopt($ch, CURLOPT_REFERER, "http://www.test.com");
      curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
      curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3);
      curl_setopt($ch,CURLOPT_TIMEOUT,3);
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
      curl_exec($ch);
   }
?>

PHP查看脚本占用内存

发布时间:December 31, 2013 // 分类:PHP // No Comments

<?php
   function convert($size)
   {
      $unit=array('b','kb','mb','gb','tb','pb');
      return @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i];
   }

   echo convert(memory_get_usage(true)); 
?>

Debian安装RPM软件

发布时间:December 31, 2013 // 分类:Debian // No Comments

1.使用alien将rpm转换为deb格式安装:

apt-get install alien 
alien pkg.rpm
dpkg -i pkg.deb

2.使用rpm管理器安装:

aptitude install rpm
rpm -i pkg.rpm

Debian7安装队列服务HTTPSQS

发布时间:December 31, 2013 // 分类:消息队列 // No Comments

aptitude install gcc make zlib1g-dev libbz2-dev
yum install gcc zlib-devel bzip2-devel
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar zxvf libevent-2.0.21-stable.tar.gz 
cd libevent-2.0.21-stable/
./configure --prefix=/usr/local/libevent-2.0.21-stable/
make && make install
cd ../

wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
tar zxvf tokyocabinet-1.4.48.tar.gz
cd tokyocabinet-1.4.48/
./configure --prefix=/usr/local/tokyocabinet-1.4.48/
make && make install
cd ../

wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
tar zxvf httpsqs-1.7.tar.gz
cd httpsqs-1.7/
sed -i 's/12/21/g' Makefile
sed -i 's/47/48/g' Makefile
make && make install

修改源码添加出多个队列支持:

/* 出多个队列 */
else if (strcmp(httpsqs_input_opt, "mget") == 0 && httpsqs_input_num >= 0 && httpsqs_input_num <= 10000) 
{
    int i;
    for( i=0; i<httpsqs_input_num; i++ )
    {
        int queue_get_value = 0;
        queue_get_value = httpsqs_now_getpos((char *)httpsqs_input_name);
        if (queue_get_value == 0) {
            evbuffer_add_printf(buf, "%s", "HTTPSQS_GET_END");
            break;
        } else {
            char queue_name[300] = {0}; /* 队列名称的总长度,用户输入的队列长度少于256字节 */
            sprintf(queue_name, "%s:%d", httpsqs_input_name, queue_get_value);
            char *httpsqs_output_value;
            httpsqs_output_value = tcbdbget2(httpsqs_db_tcbdb, queue_name);
            if (httpsqs_output_value) {
                memset(queue_name, '\0', 300);
                sprintf(queue_name, "%d", queue_get_value);    
                evhttp_add_header(req->output_headers, "Pos", queue_name);
                evbuffer_add_printf(buf, "%s\n", httpsqs_output_value);
                free(httpsqs_output_value);
            } else {
                evbuffer_add_printf(buf, "%s", "HTTPSQS_GET_END");
                break;
            }
        }
    }
}

源码分析:

将队列读取点和写入点保存为key:queue:getpos/putpos的值,队列内容key为queue:1/queue:2形式
通过httpsqs_read_putpos获取写入/读取点值
读取队列内容时httpsqs_now_read_pos对值判断及更新值,对key:queue:+1
通过tcbdbput2/tcbdget2写入/读取队列内容

更多:http://blog.s135.com/httpsqs/

PHP静态调用非静态方法性能

发布时间:December 30, 2013 // 分类:PHP // No Comments

============Which method========================Time======
Inline calculation                             0.0805 s
Normal function call                           0.3438 s
Normal method called through object            0.4118 s
Static method called statically                0.4280 s
Unspecified method called through object()     0.4294 s
Unspecified method called statically()         0.6960 s

来源:http://bbs.csdn.net/topics/350118147

分类
最新文章
最近回复
  • 常易北: 满分顶楼主!!!我也是,现在网上瞎几把扫别人云主机的智障太多了!
  • track: NAT 部分没处理,这块感觉有问题。
  • yu: 查到有用的资料很幸福!
  • boscotsang: 请问下服务器端如何控制权限让通过权限认证的客户端才能连接?现在这样只要有自编译的客户端程序都可...
  • yck932: 大侠,请问哪里有 tunnels 详细参考资料,谢谢
  • bubble: 现在linux 4.9以上的内核有个bbr的参数,用这个bbr比用锐速效果更好,可参考我的博文...
  • wang: openwrt 只有 tmp/etc/miniupnpd.conf 修改后又重置了,其他路径找...
  • wbq: 可以了 只是https透明代理如何做呢?
  • wbq: 你的这个配置需要浏览器设置代理ip+port, 现在假设不设置,只配置客户端网关为Nginx那...
  • wbq: 您好,想用Nginx做个透明代理,客户端机器配置下网关(即Nginx那台机器),客户端dns配...