php hprose扩展1.5.5,基于Hprose for PHP 1.5.6、Yii2.0.7的RPC的基本实现流程

1、已经安装Composer,更新Composer为最新版本,执行命令,结果如图1:

composer self-update

报错:Warning: Module ‘mbstring’ already loaded in Unknown on line 0

5c59af7f8cb61ce6a530fbbc75f78f73.png

报错:Warning: Module ‘mbstring’ already loaded in Unknown on line 0

2、在php.ini中,发现extension=php_mbstring.dll加载了2次,将1007行注释掉,如图2、3:

;extension=php_mbstring.dll

48462de7242e129e7e0e73a5446d7432.png

在php.ini中,发现extension=php_mbstring.dll加载了2次,将1007行注释掉

b5c5c173ef2f57f4b68466eef09c3e98.png

在php.ini中,发现extension=php_mbstring.dll加载了2次,将1007行注释掉

3、再次运行命令,结果不再报错Warning,但是在https://getcomposer.org/version的文件无法下载,如图4:

composer self-update

9c5767101166a4bd02a94a6cf5a8aa85.png

再次运行命令,结果不再报错Warning,但是在https://getcomposer.org/version的文件无法下载

4、解决方案,启用Packagist/Composer中国全量镜像,网址:http://pkg.phpcomposer.com/ ,执行命令,如图5:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

报错:

Warning: This development build of composer is over 60 days old. It is recommended to update it by running “C:\ProgramData\ComposerSetup\bin\composer.phar self-update” to get the latest version.

其大意为:

警告:此作曲家的开发版本超过60天。建议通过运行来更新它的”C:\ProgramData\ComposerSetup\bin\composer.phar self-update”,以获取最新版本。

04b12ec9cced1a8eed88e748736aedf6.png

解决方案,启用Packagist/Composer中国全量镜像,网址:http://pkg.phpcomposer.com/

5、再次执行:composer self-update,结果仍然为请求网址:https://getcomposer.org/version ,如图6:

d524d90f85560eb38cb21a06c3a4d000.png

再次执行:composer self-update,结果仍然为请求网址:https://getcomposer.org/version

6、打开C:\Users\Administrator\AppData\Roaming\Composer\config.json,清空文件内容,重新执行命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

config.json文件内容如图7

{

“repositories”: {

“packagist”: {

“type”: “composer”,

“url”: “https://packagist.phpcomposer.com”

}

}

}

7a1e4c98116f0bc573a25b543ed0b029.png

打开C:\Users\Administrator\AppData\Roaming\Composer\config.json,清空文件内容,重新执行命令

7、再次执行:composer self-update,更新成功,如图8、图9:

Updating to version a8e9df55dc62d8806360be2f79ad112b8678d397.

Downloading: 100%

Use composer self-update –rollback to return to version a066171dcc023ad6429881a7692e46f10e080f99

0685648506d8ac9501f575484cac0cb2.png

再次执行:composer self-update,更新成功

6b18d6a0cf96079e740f9287e7a46435.png

再次执行:composer self-update,更新成功

8、为Composer安装composer asset插件,执行命令,运行结果如图10:

composer global require “fxp/composer-asset-plugin:~1.0.0”

8bc77ef6b436f717b4b505f330c74885.png

为Composer安装composer asset插件,执行命令

9、执行命令,运行结果如图11:

composer global update

e35ad188ef465817f9167ce0edb8cff9.png

composer global update

10、安装Yii2,执行命令,运行结果如图12、13:

composer create-project yiisoft/yii2-app-advanced service.ygt.cm

8400060767afd333570aea7b1eac0d7a.png

安装Yii2,执行命令:composer create-project yiisoft/yii2-app-advanced service.ygt.cm

1454eb534d47bcb77f0ca840306968d2.png

安装Yii2,执行命令:composer create-project yiisoft/yii2-app-advanced service.ygt.cm

11、查看service.ygt.cm目录,发现已经安装成功,如图14:

b6672a916fc0d0f2f7ce3b54ea83f37f.png

查看service.ygt.cm目录,发现已经安装成功

12、配置虚拟主机:frontend.service.ygt.cm、backend.service.ygt.cm,打开frontend.service.ygt.cm,报错,如图15

5a318988d204adb696fd12bf28c0a026.png

配置虚拟主机:frontend.service.ygt.cm、backend.service.ygt.cm,打开frontend.service.ygt.cm,报错

13、原因在于目录E:\wwwroot\service.ygt.cm\frontend\web不存在index.php文件,如图16

ae893401f6742bc4dff614c17f51027e.png

原因在于目录E:\wwwroot\service.ygt.cm\frontend\web不存在index.php文件

14、为Composer更新composer asset插件,执行命令,运行结果如图17:

composer global require “fxp/composer-asset-plugin:~1.1.1”

9df42085726226266fa80f4a67ffa555.png

为Composer更新composer asset插件,执行命令

15、升级Yii2,运行命令,报错,如图18:

composer update yiisoft/yii2 yiisoft/yii2-composer bower-asset/jquery.inputmask

报错:Composer could not find a composer.json file in E:\wwwroot

To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ “Getting Started” section

c0f4ebe4c8bea3ed4731c8fa9d0c6478.png

升级Yii2,运行命令,报错:Composer could not find a composer.json file

16、进入目录E:\wwwroot\service.ygt.cm,再次执行命令,如图19:

composer update yiisoft/yii2 yiisoft/yii2-composer bower-asset/jquery.inputmask

结果:

Loading composer repositories with package information

Updating dependencies (including require-dev)

Nothing to install or update

Generating autoload files

856a8e345b6e153fe88dc8aa0345521f.png

进入目录E:\wwwroot\service.ygt.cm,再次执行命令

17、初始化应用,执行命令,如图20:

init

0

yes

264e8940d6b8e1194e6217799f6a8d44.png

初始化应用,执行命令:init

18、打开frontend.service.ygt.cm,如图21

d2eec4f4fbda2c47e7a0cc1de946beb1.png

打开frontend.service.ygt.cm

19、打开backend.service.ygt.cm,如图22

0cc384bf466427e964e457a103a43b10.png

打开backend.service.ygt.cm

20、添加应用member.service.ygt.cm,复制目录frontend为目录member,如图23

20bee20b9268db6fc7fe600f8949026b.png

添加应用member.service.ygt.cm,复制目录frontend为目录member

21、编辑文件E:\wwwroot\service.ygt.cm\environments\index.php,如图24

复制frontend为member

8b8f170bad2495f097a34144078ae72f.png

编辑文件E:\wwwroot\service.ygt.cm\environments\index.php

22、将E:\wwwroot\service.ygt.cm\environments下的dev、prod的frontend再次复制为member,如图25

826b23008d482853e21ad54abeb388b7.png

将E:\wwwroot\service.ygt.cm\environments下的dev、prod的frontend再次复制为member

23、执行命令发,如图26:

init

0

yes

All

656e04f24ddb1170c80fa71a68685362.png

执行命令

24、在member目录中搜索frontend,将其替换为member,建议index-test.php文件中的frontend不做替换,如图27

3909bad425eef0d83f74eda8b3126af3.png

在member目录中搜索frontend,将其替换为member,建议index-test.php文件中的frontend不做替换

25、编辑E:\wwwroot\service.ygt.cm\common\config\bootstrap.php,如图28

Yii::setAlias(‘@member’, dirname(dirname(__DIR__)) . ‘/member’);

2ea3ba5dcd113e4e5d71cf452a05f70b.png

Yii::setAlias(‘@member’, dirname(dirname(__DIR__)) . ‘/member’);

26、打开member.service.ygt.cm,如图29、30

989f86237593800b2bd62677b1afdad7.png

打开member.service.ygt.cm

e9393610ec43c68782ebf93c6955bfaa.png

打开member.service.ygt.cm

27、安装Hprose for PHP,执行命令,如图31、32:

composer require “hprose/hprose:dev-master”

4f6b266ccef906fa134515008f17ac6c.png

安装Hprose for PHP,执行命令:composer require “hprose/hprose:dev-master”

d83c3fa41e4d197919f8121738acf9e6.png

安装Hprose for PHP,执行命令:composer require “hprose/hprose:dev-master”

28、发布远程服务,新建E:\wwwroot\service.ygt.cm\member\controllers\HproseController.php,如图33:

namespace member\controllers;

use yii\base\Controller;

use Hprose\Yii\Server;

/**

* Hprose controller

*/

class HproseController extends Controller

{

public function beforeAction($action)

{

parent::beforeAction($action);

$server = new Server();

$server->setErrorTypes(E_ALL);

$server->setDebugEnabled(true);

$server->addMethod($action->actionMethod, $this, $action->id);

$server->start();

}

}

或者(建议采用此方案):

namespace member\controllers;

use yii\web\Controller;

use Hprose\Yii\Server;

/**

* Hprose controller

*/

class HproseController extends Controller

{

public $enableCsrfValidation = false;

public function beforeAction($action)

{

parent::beforeAction($action);

$server = new Server();

$server->setErrorTypes(E_ALL);

$server->setDebugEnabled(true);

$server->addMethod($action->actionMethod, $this, $action->id);

$server->start();

}

}

173e3020d11b237c70eaee9b94db51af.png

发布远程服务,新建E:\wwwroot\service.ygt.cm\member\controllers\HproseController.php

29、服务端实现,新建E:\wwwroot\service.ygt.cm\member\controllers\AvatarController.php,如图34:

namespace member\controllers;

/**

* Avatar controller

*/

class AvatarController extends HproseController

{

public function actionServer()

{

return 10;

}

public function actionHello() {

return “Hello !”;

}

public function actionSum() {

return strval(array_sum(func_get_args()));

}

}

f92a06bcc033b909f63547c3ec4c53b1.png

服务端实现,新建E:\wwwroot\service.ygt.cm\member\controllers\AvatarController.php

30、打开网址:http://member.service.ygt.cm/?r=avatar/server ,如图35:

TP3.2.3的HproseController类是将所在控制器的所有方法尽皆发布,而现有实现是只发布当前操作方法

Fa1{s6″server”}z

2a57584da4302de75d617eb33e9eaf1a.png

TP3.2.3的HproseController类是将所在控制器的所有方法尽皆发布,而现有实现是只发布当前操作方法

30、客户端实现,新建E:\wwwroot\service.ygt.cm\zhidao\controllers\SiteController.php,如图36:

namespace zhidao\controllers;

use yii\web\Controller;

use Hprose\Http\Client;

/**

* Site controller

*/

class SiteController extends Controller

{

public function actionClient() {

$client = new Client(‘http://member.service.ygt.cm/?r=avatar/server’);

echo $client->server();

}

}

1fb2d64522a8429ac04e94e12448bee9.png

客户端实现,新建E:\wwwroot\service.ygt.cm\zhidao\controllers\SiteController.php

31、打开网址:http://zhidao.service.ygt.cm/?r=site/client ,如图37:

fce030c8446273a6ab241e97d8102665.png

打开网址:http://zhidao.service.ygt.cm/?r=site/client

32、或者实现hello操作方法,如图38、39:

相对于TP3.2.3的实现,弊端便是即使是远程同一控制器下的操作方法,也是需要实例化两次Client的,不过感觉问题不大,一般来说一个操作方法就足够了。

061777f3bb4b7aba92ce1d5ae4c9eb41.png

相对于TP3.2.3的实现,弊端便是即使是远程同一控制器下的操作方法,也是需要实例化两次Client的,不过感觉问题不大,一般来说一个操作方法就足够了。

8d890101a68380f8fd49f997e32dfcfd.png

相对于TP3.2.3的实现,弊端便是即使是远程同一控制器下的操作方法,也是需要实例化两次Client的,不过感觉问题不大,一般来说一个操作方法就足够了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值