美文网首页
php微服务

php微服务

作者: 坏坏坏坏_3a9f | 来源:发表于2020-05-26 10:57 被阅读0次

PHP的微服务其实和正常的crontab脚本区别不大,唯一的区别就是微服务可以自动判断进程是否被杀死 杀死的话就会重启

言语表达能力有限 废话不多说 直接上代码

<?php
/**
 * 异步队列拼单
 * @author yjq
 */
include_once __DIR__ . ('/../../kis_lib_zhangyusport/load.php');
set_time_limit(0);
ini_set('memory_limit', '256M');

$argv[1]();

function check() {
    $max = 1;
    $buffer = array();
    $buf = array();
    $handle = popen ( "ps aux | grep 'asyncQueue/spelllog'| grep 'process' | grep -v grep | awk '{print $2}'", "r" );
    while ( ! feof ( $handle ) ) {
        $buffer = fgets ( $handle );
        $buf[] = $buffer;
    }
    pclose($handle);
    $han_cou = count($buf);
    while ($han_cou <= $max) {
        $path = dirname(__FILE__) . "/spelllog.php";
        $coms = "nohup php {$path} process >> /tmp/spelllog.log 2>&1 &";
        exec($coms);
        $han_cou++;
    }
    unset($buffer,$buf);
}

function process(){
    while (true){
        $pid = pcntl_fork();
        if ($pid == - 1) {
            // 错误处理:创建子进程失败时返回-1.
            die('could not fork');
        }else if($pid){
            pcntl_waitpid($pid, $status);
        }else{
            try{
                $list = lib_pay_plan_dao_order::getAppointTypeOrder();
                hlp_log::log('spelllog','start:'.$list);
                if($list){
                    lib_pay_plan_model_order::getNoCompleteSpell($list);
                }
            } catch (Exception $ex) {
                hlp_log::log('spelllog',$ex->getMessage());
            }
            exit;
        }
        usleep(1000000);
    }
}
image.gif

1、check方法是运行整个微服务的,具体用法就是crontab

 */2 * * * * source /etc/profile && /usr/local/php/bin/php -f /opt/wwwroot/crontab.zhangyusport.com/asyncQueue/spelllog.php  check  > /dev/null 2>&1 &
image.gif

每两分钟运行check一次就是让微服务跑起来

2、process 就是进程代码了
*注意 子父进程不能共用同一个数据库链接 这样会报错的

3、上面的代码只控制跑了一个进程 进程条数的控制在check方法里面的 $max就代表是最大进程 usleep里面的是微秒 切记是微秒 不是毫秒

下面再贴出2个进程的代码。其实微服务也很简单,就是要对linux的命令灵活运行和掌握才能写出优秀的微服务

<?php
/**
 * 异步队列记录投票日志
 * @author zs
 */
include_once __DIR__ . ('/../../kis_lib_zhangyusport/load.php');
set_time_limit(0);
ini_set('memory_limit', '256M');

$argv[1]();

function check() {
    $max = 2;
    $buffer = array();
    $buf = array();
    $handle = popen ( "ps aux | grep 'queue/votelog'| grep 'process' | grep -v grep | awk '{print $2}'", "r" );
    while ( ! feof ( $handle ) ) {
        $buffer = fgets ( $handle );
        $buf[] = $buffer;
    }
    pclose($handle);
    $han_cou = count($buf);
    while ($han_cou <= $max) {
        $path = dirname(__FILE__) . "/votelog.php";
        $coms = "nohup php {$path} process >> /tmp/votelog.log 2>&1 &";
        exec($coms);
        $han_cou++;
    }
    unset($buffer,$buf);
}

function process(){
    $queue_key = lib_queue_redis::queuekey_votlog;
    while (true){
        $message = lib_queue_redis::getItem($queue_key);
        if($message){
            excePid($message);
        }else{
            usleep(20000);
        }
    }
}

/**
 * fork子线程执行逻辑
 */
function excePid($message){
    $pid = pcntl_fork();
    if ($pid == - 1) {
        // 错误处理:创建子进程失败时返回-1.
        die('could not fork');
    }else if($pid){
        pcntl_waitpid($pid, $status);
    }else{
        try{
            hlp_log::log('votelog_queue','start:'.$message);
            $message = json_decode($message,true);
            if(is_array($message)){
                   lib_news_model_vote::insertVotelog($message);
            }
        } catch (Exception $ex) {
            hlp_log::log('votelog_queue',$ex->getMessage());
        }
        exit;
    } 
}
image.gif

相关文章

  • 微信实验五、PHP后台0元部署

    一、实验目的 1、掌握微信开发PHP后台部署。 二、实验内容 1、申请服务器资源。 2、部署PHP后台。 三、实验...

  • PHP初认识

    PHP简介 PHP 是运行在web服务器上的脚本语言,PHP应用服务器作为web服务器的辅助软件,专门解释PHP代...

  • yum 快速搭建LNMP 环境

    关闭默认的 httpd 服务 安装 Nginx 支持 安装 php 支持 启动 php 服务 nginx 配置

  • centos6.9安装php7.1.18

    1、安装源 2、安装 3、启动php服务(启动后才能与nginx等服务连同) 4、关闭php服务

  • php大法好

    PHP 是服务器端脚本语言; PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文...

  • 07-Ajax

    PHP基础 PHP基础语法大部分和JS差不多 如何运行编写好的PHP文件因为PHP是服务端编程语言,所以要在服务端...

  • 微信网页获取用户信息(PHP、python实现)

    0. 前言 准备: 微信认证公众号(要求企业才能认证),或微信测试号(推荐) PHP需要准备Apach服务器,py...

  • 安装

    服务器 确保服务器安装了下面的几个拓展: PHP >= 5.6.4 OpenSSL PHP Extension P...

  • 无标题文章

    NuSOAP 发布Webservice PHP SOAP 服务器 用PHP和NuSoap来建立SOAP服务器非常容...

  • php-fpm配置pool,慢日志以及通信方式比较(2)

    php-fpm常用配置 php-fpm的pool php-fpm的pool是这个php-fpm服务的池子,php-...

网友评论

      本文标题:php微服务

      本文链接:https://www.haomeiwen.com/subject/fmsmahtx.html