[SF] Symfony 在 console 中结合 Workerman

 

在web框架的console中,命令不再是直接指定入口文件,如以往 php test.php start,而是类似 php app/console do 的形式。

workerman 对命令的解析是 parseCommand 方法,里面主要是处理 $argv 全局变量。

那么我们只需要在自己的逻辑中对其重新赋值,满足 $argv[1] 是动作 start | stop | restart | ... 即可,那么剩余workerman参数就是 $argv[2],依次类推。

 

Symfony2 command:

namespace AppBundle\Command;

use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

use Workerman\Connection\TcpConnection;
use Workerman\Worker;

/**
 * @author farwish <farwish(a)foxmail.com>
 *
 * Class DataWorkerCommand
 * @package AppBundle\Command
 */
class DataWorkerCommand extends BaseCommand
{
    public function configure()
    {
        $this->setName('xc:data:worker')
            ->setDescription('启动服务')
            ->addArgument(
                'subcommands',
                InputArgument::IS_ARRAY,
                '可选多个参数'
            )
        ;
    }

    /**
     * app/console xc:data:worker start d [g]
     * app/console xc:data:worker stop
     * app/console xc:data:worker status
     * app/console xc:data:worker restart d [g]
     *
     * @param InputInterface $input
     * @param OutputInterface $output
     */
    public function execute(InputInterface $input, OutputInterface $output)
    {
        parent::execute($input, $output);

        global $argv;

        /* Original data like
        Array
        (
            [0] => worker.php
            [1] => start
            [2] => -d
            [3] => -g
        )
        */
        /* Console data like
        Array
        (
            [0] => app/console
            [1] => xc:data:worker
            [2] => start
            [3] => d
            [4] => g
        )
        */

        // So redefine arguments
        if (isset($argv[2])) {
            $argv[1] = $argv[2];
            if (isset($argv[3])) {
                $argv[2] = "-{$argv[3]}";
                if (isset($argv[4])) {
                    $argv[3] = "-{$argv[4]}";
                } else {
                    unset($argv[3]);
                }
            } else {
                unset($argv[2]);
            }
        }

        // worker
        $worker = new Worker("websocket://0.0.0.0:9000");

        $worker->count = 4;

        $worker->onMessage = function ($connection, $data)
        {
            /* @var TcpConnection $connection */
            $connection->send('hello');
        };

        Worker::runAll();
    }
}

 

Thats all. 

Link: http://www.cnblogs.com/farwish/p/7988617.html

转载于:https://www.cnblogs.com/farwish/p/7988617.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值