PHPRPC是面向服务的高性能远程过程调用协议。PHPRPC for java 是此协议的一种实现,详细请到官方看PHPRPC的介绍 ,以其它rpc协议的性能对比请:Java、PHPRPC、Hessian、Burlap、XML 序列化的效率对比 。我在这时只是试用下。
下载:PHPRPC 3.0.2 for Java , 解压到(如:f:/phprpc_3.0.2_for_java),然后双击make.bat生成服务与客户端,生成phprpc.jar和phprpc_client.jar两个jar,把phprpc.jar放到web项目的WEB-INF/lib目录下。
先写个模拟业务接口:Hello.java接口与其实现MyHello.java
    - package com.chenlb.phprpc;   
-   
-  
-  
-  
-  
-   
- public interface Hello {   
-   
-     String say(String name);   
- }  
 
package com.chenlb.phprpc;
/**
* 业务接口
*
* @author chenlb 2009-2-22 下午08:06:13
*/
public interface Hello {
String say(String name);
}
    - package com.chenlb.phprpc;   
-   
-  
-  
-  
-  
-   
- public class MyHello implements Hello {   
-   
-     public String say(String name) {   
-         return "Hello "+name;   
-     }   
- }  
 
package com.chenlb.phprpc;
/**
* 服务器的一个模拟任务
*
* @author chenlb 2009-2-22 下午08:05:42
*/
public class MyHello implements Hello {
public String say(String name) {
return "Hello "+name;
}
}
然后发布业务(被远程调用的):rpc.jsp
    - <%@ page import="com.chenlb.phprpc.*" %>   
- <%@ page import="org.phprpc.*" %>   
- <%   
- Hello hello = new MyHello();   
- PHPRPC_Server phprpc_server = new PHPRPC_Server();   
- phprpc_server.add(hello);   
- phprpc_server.start(request, response);   
- %>  
 
<%@ page import="com.chenlb.phprpc.*" %>
<%@ page import="org.phprpc.*" %>
<%
Hello hello = new MyHello();
PHPRPC_Server phprpc_server = new PHPRPC_Server();
phprpc_server.add(hello);
phprpc_server.start(request, response);
%>
当然要把Hello.class与Myhello.class放到web项目里,如WEB-INF/classes。
编写java客户端代码,试用:
    - package com.chenlb.phprpc;   
-   
- import org.phprpc.PHPRPC_Callback;   
- import org.phprpc.PHPRPC_Client;   
-   
- public class PhpRpcDemo {   
-   
-     public static void main(String[] args) {   
-         PHPRPC_Client client = new PHPRPC_Client("http://localhost:8080/phprpc/rpc.jsp");   
-         Hello m = (Hello) client.useService(Hello.class);   
-         System.out.println(m.say("chenlb"));   
-   
-           
-         client.invoke("say", new Object[] {"other"}, new PHPRPC_Callback() {   
-             public void handler(String result, Object[] args) {   
-                 System.out.println("handler:");   
-                 System.out.println(result);   
-                 System.out.println("args:"+args[0]);   
-                 System.out.println();   
-             }   
-         });   
-     }   
- }  
 
package com.chenlb.phprpc;
import org.phprpc.PHPRPC_Callback;
import org.phprpc.PHPRPC_Client;
public class PhpRpcDemo {
public static void main(String[] args) {
PHPRPC_Client client = new PHPRPC_Client("http://localhost:8080/phprpc/rpc.jsp");
Hello m = (Hello) client.useService(Hello.class);
System.out.println(m.say("chenlb"));
//也可以以 callback形式调用.
client.invoke("say", new Object[] {"other"}, new PHPRPC_Callback() {
public void handler(String result, Object[] args) {
System.out.println("handler:");
System.out.println(result);
System.out.println("args:"+args[0]);
System.out.println();
}
});
}
}
示例了两种使用方式,输出结果为:
Hello chenlb
handler:
Hello other
args:other
使用的确比较简单。可以在 javaeye 群组里与 PHPRPC 作者交流