Pheanstalk queueng列表保留PHP

时间:2017-01-10 05:32:54

标签: php codeigniter beanstalkd pheanstalk

大家好我所有的麻烦我很抱歉这是我第一次使用这个。我的项目涉及一个5000条目的一次保存,当我工作时,由于流量请求获得502.所以我的解决方案是在这个过程中使用pheanstalk是我的代码下面是可以的。我在服务器上安装了beanstalk。

    require("vendor/autoload.php");
use Pheanstalk\Pheanstalk;
$pheanstalk = new Pheanstalk('127.0.0.1');   

#producer
$put = $pheanstalk->useTube("ashimatube".date("His"))
->put(json_encode(array("test"=>date("Yhs"))));

#worker
$job = $pheanstalk->watch("ashimatube".date("His"))
->ignore("default")->reserve();

1 个答案:

答案 0 :(得分:1)

豆茎

Facebook在 Philotic ,Inc开发的 Beanstalk 用于改善Facebook应用程序上的原因(超过1000万用户)的响应时间。 Beanstalk将最常见页面的平均响应时间缩短到原始页面的一小部分,从而显着改善了用户体验。

以下是Codeigniter的示例

  1. here下载 Pheastalk
  2. Pheastalk 是beanstalkd队列的PHP客户端。

    1. application/libraries内添加 Pheanstalk 文件夹。

    2. pheanstalk.php下创建application/config

    3. 添加以下代码。

      <?php
      
        if (!defined('BASEPATH'))
          exit('No direct script access allowed');
      
         $config['ip'] = '192.168.0.2'; // Example IP, Enter your IP
         $config['port'] = 11300;
      
    4. application/libraries下创建Pheanstalk.php(P为大写字母)。

    5. 添加以下代码。

       if (!defined('BASEPATH'))
         exit('No direct script access allowed');
      
       /** Pheanstalk root directory */
       if (!defined('PHEANSTALK_ROOT')) 
       {
            define('PHEANSTALK_ROOT', dirname(__FILE__) . '/');
            require(PHEANSTALK_ROOT . 'pheanstalk/pheanstalk_init.php');
       }
      
       class Pheanstalk extends Pheanstalk_Pheanstalk 
       {
      
          public function __construct($params) 
          {
              parent::__construct($params['ip'], $params['port']);
          }
       } 
      
    6. 创建一个这样的控制器。

       Class Test extends CI_Controller 
       {
      
        public function index() 
        {
          $this->load->library('pheanstalk');
          var_dump($this->pheanstalk->listTubes());
          $this->pheanstalk->useTube('testtube')->put("job payload goes here\n");
      
          $job = $this->pheanstalk
                  ->watch('testtube')
                  ->ignore('default')
                  ->reserve();
      
          echo $job->getData();
      
          $this->pheanstalk->delete($job);
      } }
      
    7. 试试这个。