文章来自于:http://blog.****.net/half1/article/details/21095665
本文参考了Hprose官方的用户手册,Hprose官网:http://www.hprose.com/
使用Hprose制作一个简单的分布式应用程序只需要几分钟的时间。本文将用一个简单的实例来带您快速浏览使用Hprose for PHP进行分布式程序开发的全过程。
一、安装Hprose for PHP
安装条件
1)PHP 5.0或更高版本
2)Apache、IIS、lighttpd、nginx或其它任何一款可以运行php的web服务器。3)Hprose for PHP支持SAE云计算平台,在SAE云计算平台上不需要单独的服务器。
安装方法
1)直接将Hprose for PHP的所有文件(hproseCommon.php,hproseIO.php,hproseHttpServer.php和hproseHttpClient.php)直接复制到您的开发环境的目录下即可,无需任何安装步骤。2)Hprose for PHP有三个版本,分别是面向普通的PHP配置,带有curl扩展的PHP配置和SAE平台的。这三个版本目前只有hproseHttpClient.php是有区别的,但是用法完全相同。
二、创建Hprose的Hello服务器
创建PHP的Hprose的服务器非常简单。下面我们以Linux环境为例来讲解。假设在Linux下已经配置好了Web服务器(apache、lighttpd或其它任何http服务器),并且可以执行PHP程序,发布路径为/var/www。然后我们在发布目录下建立一个hprose目录,把Hprose for PHP的几个文件放到该目录下。然后在发布目录下创建一个helloserver.php文件,内容如下:
- <?php
- include("hprose/hproseHttpServer.php");
- function hello($name){
- return "Hello".$name;
- }
- $server = new HproseHttpServer();
- $server->addFunction("hello"); //发布函数
- $server->handle();
- ?>
测试:访问http://localhost/helloserver.php,如果出现“Fa1{s5"hello"}z”就表示服务发布成功。
猜测这个序列化结果的含义:F表示function;a表示List/Array;1表示List/Array的长度;{和}是分隔符,便于解析;s表示String;4表示后接string的长度;z表示end。
三、创建Hprose的Hello客户端
PHP的Hprose客户端创建更加容易,同样在发布目录下创建helloclient.php文件,内容如下:
- <?php
- include("hprose/hproseHttpClient.php");
- $client = new HproseHttpClient("http://localhost/helloserver.php");
- echo $client->Hello("Hprose");
- ?>
测试:访问http://localhost/helloclient.php,或者在命令行上输入php helloclient.php,如果出现“Hello Hprose”就表示客户端创建成功。
四、个人总结
Hprose的应用就三件事,第一,复制Hprose文件进项目;第二,写Hprose服务端;第三,写Hprose客户端。Hprose服务端要做的事就两件。一、new一个HproseHttpServer对象;二、用这个对象发布服务,包括函数、方法、对象甚至类。Hprose客户端要做的事就两件。一、new一个HproseHttpClient对象;二、用这个对象调用服务端发布的各种服务。注意:1、server和client之间用序列化结果交互,在server中使用echo、var_dump等函数会扰乱序列化结果,故不能使用,在client中可以使用。疑问:1、当Hprose服务端或客户端有错时,服务器会报500错误,但是不好调试。如何调试。