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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
好的,你的问题是关于 Hprose for Java 服务器的吗?那么,让我来为你解答。Hprose是一种跨语言的RPC协议,提供了多种语言的实现方式,包括Java、PHP、Python、JavaScript等。在Java中,我们可以使用Hprose for Java来实现服务器端的开发。 要使用Hprose for Java,首先需要在项目中引入相应的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.github.hsiafan</groupId> <artifactId>hprose-java</artifactId> <version>3.0.8</version> </dependency> ``` 在使用Hprose for Java时,需要定义一个接口,并在接口上添加@HproseService注解,表示这是一个Hprose服务。接着,我们可以在接口中定义需要暴露给客户端调用的方法,方法的参数和返回值可以是任意类型。例如: ``` @HproseService public interface MyService { String sayHello(String name); } ``` 在实现类中,我们需要实现接口中定义的方法,并启动Hprose服务器,将实现类注册为服务提供者。例如: ``` public class MyServiceImpl implements MyService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } public static void main(String[] args) throws IOException { MyService service = new MyServiceImpl(); HproseTcpServer server = new HproseTcpServer("tcp://0.0.0.0:8080"); server.add(service, MyService.class); server.start(); } } ``` 以上代码创建了一个TCP协议的Hprose服务器,监听8080端口,将MyServiceImpl实例注册为服务提供者,并暴露了一个名为sayHello的方法。 客户端可以使用Hprose for Java提供的客户端类来调用服务端的方法。例如: ``` public class MyClient { public static void main(String[] args) throws IOException { HproseTcpClient client = new HproseTcpClient("tcp://localhost:8080"); MyService service = client.useService(MyService.class); String result = service.sayHello("world"); System.out.println(result); } } ``` 以上代码创建了一个TCP协议的Hprose客户端,连接到本地的8080端口,并调用了服务端的sayHello方法。 这就是Hprose for Java服务器端的基本使用方法。希望能够对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值