function run_tuning_pub($seq, $pid, $max_cnt, $one_msg)
{
    // 初始化log配置
    $log_conf = new BigpipeLogConf();
    $log_conf->file = sprintf('publisher-%u-%u.log', $seq, $pid);
    if (BigpipeLog::init($log_conf)) {
        //echo '[Success] [open meta agent log]\n';
        //print_r($log_conf);
        //echo '\n';
    } else {
        echo "[Failure] [open meta agent log]\n";
        print_r($log_conf);
        echo "\n";
        return;
    }
    // subscriber的configure
    $conf = new BigpipeConf();
    $conf_dir = './conf';
    $conf_file = './for-tuning.conf';
    if (false === bigpipe_load_file($conf_dir, $conf_file, $conf)) {
        echo "[failure][when load configure]\n";
        return;
    }
    // 发布参数
    $pipe_name = 'pipe2';
    //$pipelet_id = 1; // 加1在哪里做好呢?
    $token = 'token';
    $partitioner = new TestPubPartitioner($pid);
    // 生成一个1K左右的包
    $max_msg_count = 12;
    // 500k
    $msg = null;
    $the_one = sprintf("[case:%u]\n", $seq);
    $uid = BigpipeUtilities::get_uid();
    $msg_package = new BigpipeMessagePackage();
    $msg_count = 0;
    while ($msg_count++ < $max_msg_count) {
        $msg = sprintf("[php-api-test][bigpipe_comlog_pvt_mm][uid:%s][package:%u][seq:%u]\n", $uid, 0, $msg_count);
        if (true === $one_msg) {
            $the_one .= $msg;
        } else {
            if (!$msg_package->push($msg)) {
                echo "[fail to pack message]{$msg}\n";
                break;
                // 退出
            }
        }
    }
    // end of add message to package
    if (true == $one_msg) {
        if (!$msg_package->push($the_one)) {
            echo "[fail to pack message]{$the_one}\n";
            return;
            // 退出
        }
    }
    // 定义测试中发包条数
    $max_package_count = $max_cnt;
    echo "\n\n[Publish {$max_package_count} packages]\n\n";
    $pub_file_name = sprintf('./pub-timer-%u-%u.csv', $seq, $pid);
    $pub_file = fopen($pub_file_name, 'w+');
    $pub = new BigpipePublisher();
    $stat = array(0 => 0, 1 => 0, 2 => 0);
    if ($pub->init($pipe_name, $token, $partitioner, $conf)) {
        echo "[Success][init publisher]\n\n";
        $count = 0;
        $succeed = 0;
        $total_start = BigpipeUtilities::get_time_us();
        $is_first = true;
        printf("[case:%u][start:%u]\n\n", $seq, $total_start);
        while ($count < $max_package_count) {
            $count++;
            //$max_msg_count = rand(1, $max_package_message_count);
            //echo "[Pack $max_msg_count messages to package <$count>]\n";
            // if ($msg_count != $max_msg_count + 1)
            // {
            //     echo "[expected:$max_msg_count][actual:$msg_count]\n";
            //     continue; // 打包失败,退出
            // }
            $start_time = BigpipeUtilities::get_time_us();
            $msg_package->push(sprintf('timestamp:%u', $start_time));
            // 加入时间戳
            $pub_result = $pub->send($msg_package);
            $end_time = BigpipeUtilities::get_time_us();
            if (false === $pub_result) {
                //echo "[fail to publish message package][count:$count]\n";
                //break; // 出错便停止
            } else {
                // write result to file
                //$ret_str = sprintf("%d,%u,%u,%u\n",
                //                   $pub_result->error_no,
                //                   $pub_result->pipelet_id,
                //                   $pub_result->pipelet_msg_id,
                //                   $pub_result->session_msg_id);
                //fwrite($pub_file, $ret_str);
                if (true == $is_first) {
                    printf('[%u][%u]\\n', $pub_result->pipelet_id, $pub_result->pipelet_msg_id);
                    $is_first = false;
                }
                $succeed++;
            }
            $msg_package->pop();
            // 弹出时间戳
            $t = (double) ($end_time - $start_time) / 1000;
            $t_str = sprintf("%u\n", $t);
            fwrite($pub_file, $t_str);
        }
        $total_end = BigpipeUtilities::get_time_us();
        echo "[Publisher][seq:{$seq}][count:{$count}][success:{$succeed}]====\n";
        $avg = (double) ($total_end - $total_start) / (double) (1000 * $max_package_count);
        printf("\n[Publisher][case:%u][avg_time:%f(ms)]\n", $seq, $avg);
    } else {
        echo '[Failure][init publisher]\\n';
    }
    $pub->uninit();
    BigpipeLog::close();
}
$uid = BigpipeUtilities::get_uid();
$count = 0;
$succeed = 0;
while ($count < $max_package_count) {
    $pub = new BigpipePublisher();
    if ($pub->init_ex($pipe_name, $token, $partitioner, $conf)) {
        // 发布流程从调用init接口成功后开始
        echo '[Success][init publisher]\\n';
        // 与c-api不同,
        // bigpipe php-api 发送的是一个message package
        // message package大小不能超过2MB
        // 用户声明BigpipeMessagePackage后, 调用push接口向package添加单条message
        $max_msg_count = rand(1, $max_package_message_count);
        echo "[Pack {$max_msg_count} messages to package <{$count}>]\n";
        $msg = null;
        $msg_package = new BigpipeMessagePackage();
        $msg_count = 0;
        while ($msg_count++ < $max_msg_count) {
            $msg = sprintf("[php-api-test][bigpipe_pvt_cluster3][uid:%s][package:%u][seq:%u]\n", $uid, $count, $msg_count);
            // 用户向message package添加单条message
            if (!$msg_package->push($msg)) {
                echo "[fail to pack message]{$msg_count}\n";
                break;
                // 跳出loop
            }
        }
        // end of add message to package
        if ($msg_count != $max_msg_count + 1) {
            echo "[expected:{$max_msg_count}][actual:{$msg_count}]\n";
            continue;
            // 打包失败,退出
 private function _gen_recv_response()
 {
     $topic_id = 65535;
     $bad_topic_id = 0;
     $pkg = new BigpipeMessagePackage();
     $msg = 'This is a test case';
     $pkg->push($msg);
     $msg_body = null;
     $pkg->store($msg_body);
     $sign = creat_sign_mds64($msg_body);
     $frame = new BStompMessageFrame();
     $frame->priority = 10;
     $frame->persistent = 1;
     $frame->no_dedupe = 1;
     $frame->timeout = BigpipeUtilities::get_time_us();
     $frame->destination = 'cluster-for-unittest';
     $frame->session_id = BigpipeUtilities::get_uid();
     $frame->subscribe_id = BigpipeUtilities::get_uid();
     $frame->receipt_id = BigpipeUtilities::gen_receipt_id();
     $frame->session_message_id = BigpipeUtilities::get_uid();
     $frame->topic_message_id = $topic_id;
     $frame->global_message_id = 76248;
     $frame->cur_checksum = $sign[2];
     $frame->last_checksum = 0;
     $frame->message_body = $msg_body;
     $frame->store();
     $good = $frame->buffer();
     // topic message id ´íÎóµÄcase
     $frame->topic_message_id = $bad_topic_id;
     $frame->store();
     $bad_topic = $frame->buffer();
     // message body ´íÎóµÄcase
     $frame->topic_message_id = $topic_id;
     $frame->message_body = '';
     $frame->store();
     $bad_body = $frame->buffer();
     // checksum´íÎóµÄcase
     $frame->message_body = $msg_body;
     $frame->cur_checksum = 201;
     $frame->store();
     $bad_checksum = $frame->buffer();
     // ´´ÔìÒ»¸öerrorµÄ°ü
     $err_pkg = '1';
     $frame->message_body = $err_pkg;
     $err_sign = creat_sign_mds64($err_pkg);
     $frame->cur_checksum = $err_sign[2];
     $frame->store();
     $bad_pkg = $frame->buffer();
     // ´´ÔìÒ»¸öpop errorµÄ°ü
     $frame->message_body = pack("L2", 1, 5);
     // ÕâÊÇÒ»¸ö³¤¶ÈΪ5£¬µ«ÊÇûÓÐÊý¾ÝµÄ»µ°ü
     $empty_sign = creat_sign_mds64($frame->message_body);
     $frame->cur_checksum = $empty_sign[2];
     $frame->store();
     $empty_pkg = $frame->buffer();
     $res_arr = array('good' => $good, 'bad_topic' => $bad_topic, 'bad_body' => $bad_body, 'bad_checksum' => $bad_checksum, 'bad_pkg' => $bad_pkg, 'empty_pkg' => $empty_pkg);
     return $res_arr;
 }