转:Hprose for php(一)——快速入门
文章来自于:http://blog.csdn.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错误,但是不好调试。如何调试。
转:Hprose for php(一)——快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- XPath总结(转)
XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两个版本.其中Xpath1.0是199 ...
- 高性能Java Web 页面静态化技术(原创)
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...
- ubuntu忘记密码
Do these two things just to make sure: mount -o remount,rw / This first part remounts the root parti ...
- Linux散列表(一)——操作函数
散列表(又名哈希表)仅仅需要一个包含单一指针的链表头.它是双向链表的变体.它不同于双链表——表头和结点使用相同的结构体——散列表对表头和结点有不同的定义.如下: struct hlist_head { ...
- Java EE 7 / JAX-RS 2.0: Simple REST API Authentication & Authorization with Custom HTTP Header--reference
REST has made a lot of conveniences when it comes to implementing web services with the already avai ...
- Understanding Extension Class Loading--官方
http://docs.spring.io/spring-amqp/docs/1.3.6.RELEASE/reference/html/sample-apps.html#d4e1285 http:// ...
- Break和Continue的一些注意事项
Break: 1)可以用于switch-case判断中,用于跳出switch 2)用在循环中,用于立即跳出循环 其中,用于循环的情况下,跳出的是break所在的循环 Continue: 立即结束本次循 ...
- XML在JAVA项目中的作用
java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...
- JavaBean学习--练习示例
初识Javabean,没感觉这鸟东西有什么好用的,一定是我太笨了 自己用jsp测试了下,这里用application作用域做个示例 <%@ page language="java&qu ...
- Android中的BroadCast静态注册与动态注册
1.静态注册 新建MyBroadcast类继承BroadcastReceiver,实现onReceive方法 /** * Author:JsonLu * DateTime:2015/9/21 16:4 ...