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

发布于 2022-09-07 22:40:18 字数 3065 浏览 26 评论 0

框架使用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没有得到任何返回值,请问是什么问题?哪个环节出问题呢?谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文