thinkphp5.1 workman启动webserver,与hprose整合后没有内容输出

框架使用tp5.1,workman使用tp官方提供的composer包。想问下如果把hprose也整合进来?

做过的尝试如下:

控制器(充当客户端)

<?php

namespace app\controller;

use com\qidugo\controller\BaseController;

class IndexController extends BaseController
{
    public function index()
    {
        $this->rpclient('http://192.168.10.10/demo', 'test1')->then(function ($res) {
            var_dump($res);
        });
    }

    public function hello($name = 'ThinkPHP5')
    {
        return 'hello,' . $name;
    }
}

客户端的基类控制器如下:

<?php

namespace com\qidugo\controller;

use Hprose\Http\Client as HproseHttpClient;

class BaseController
{
    public $rpc_client;

    /**
     * rpc客户端
     * @param string $uri 远程调用的uri
     * @param string $remote_method 调用远程的方法名
     * @param array $args 调用时传递的参数
     * @return mixed
     */
    public function rpclient($uri, $remote_method, $args = [])
    {
        $this->rpc_client = new HproseHttpClient($uri . '/start'); // 先调用一次服务启动
        return $this->rpc_client->$remote_method();
    }
}

提供者(服务端)

<?php

namespace app\controller;

use com\qidugo\controller\HproseController;

class DemoController extends HproseController
{
    public function test1()
    {
        return 'test1';
    }
}

提供者基于的控制器如下:

<?php

namespace com\qidugo\controller;

use Hprose\Http\Server as HproseHttpServer;

/**
 * Hprose控制器类
 */
class HproseController
{
    /**
     * @var HproseHttpServer
     */
    public $server;

    protected $allowMethodList = '';
    protected $crossDomain = false;
    protected $P3P = false;
    protected $get = true;
    protected $debug = false;

    public function __call($method, $args)
    {
    }

    /**
     * hprose 初始化方法
     * @throws \Exception
     */
    public function __construct()
    {
        //实例化HproseHttpServer
        $this->server = new HproseHttpServer();
//        $this->server->addInstanceMethods($this);
        if ($this->allowMethodList) {
            $methods = $this->allowMethodList;
        } else {
            $methods = get_class_methods($this);
            $methods = array_diff($methods, array('__construct', '__call', '_initialize', 'initialize'));
        }
        $this->server->addMethods($methods, $this);
        if (config('app_debug') || $this->debug) {
            $this->server->setDebugEnabled(true);
        }
        // Hprose设置
        $this->server->setCrossDomainEnabled($this->crossDomain);
        $this->server->setP3PEnabled($this->P3P);
        $this->server->setGetEnabled($this->get);
        // $this->server->start();
    }

    public function start()
    {
        // 启动server
        $this->server->start();
    }
}

使用vagrant做的开发环境,php think worker后进程能正常跑起来:

clipboard.png

访问index没有得到任何返回值,请问是什么问题?哪个环节出问题呢?谢谢

阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题