PHPRPC,它的商业版本是Hprose。这里仅记录其使用方法。其它相关内容可自行搜索。

对于开源的东西,建议大家看看其源码。

1、需要引入的jar包:phprpc_spring.jar,http://pan.baidu.com/s/1eQhbUwU

2、web.xml中添加的内容:

 <!-- phprpc -->
<servlet>
<servlet-name>phprpc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:phprpc-servlet.xml</param-value>
<!-- <param-value>WEB-INF/classes/phprpc-servlet.xml</param-value> -->
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>phprpc</servlet-name>
<url-pattern>/phprpc/*</url-pattern>
</servlet-mapping>

3、新建phprpc-servlet.xml,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- PHPRPC配置 -->
<!--appservice中要注入的内容,需要set和get方法。同时此处用property配置好。不讲详细了 -->
<bean id="phprpcControllerImpl" class="com.XXXX.biz.controller.PhprpcControllerImpl">
<property name="phprpcService" ref="phprpcService"></property>
</bean> <bean name="/phpRpcService.htm" class="org.phprpc.spring.remoting.PHPRPC_Exporter">
<property name="service" ref="phprpcControllerImpl" />
<property name="serviceInterface" value="com.XXXX.biz.controller.PhprpcController" />
</bean>
</beans>

2和3决定了可以使用 项目路径例如:http://localhost:8080/project/phprpc/phpRpcService.htm 访问接口。

4、分别新建以下内容

接口:PhprpcController.java

public interface PhprpcController {

    public String test(String type,Object firstorders,Object secondorders,Object thirdorders);
}

接口实现类:PhprpcControllerImpl.java

@Controller
public class PhprpcControllerImpl extends BaseController implements PhprpcController{ @Autowired
private PhprpcService phprpcService; public PhprpcService getPhprpcService() {
return phprpcService;
} public void setPhprpcService(PhprpcService phprpcService) {
this.phprpcService = phprpcService;
} public String test(String type,Object firstorders,Object secondorders,Object thirdorders) {
log.info("执行rpc。。。 type:"+type+" firstorders:"+firstorders+" secondorders:"+secondorders+" thirdorders"+thirdorders);
log.info("参数类型。。。 type:"+type+" firstorders:"+firstorders.getClass().getName()+
" secondorders:"+secondorders.getClass().getName()+" thirdorders"+thirdorders.getClass().getName());
String msg = "Hello PHPRPC!";
return msg;
}
}

--------------------分界线--------------------------上面是构建phpRpc,下面是使用----------------------------------------分界线-------------------------------------------

5、在知道了类似 【http://localhost:8080/project/phprpc/phpRpcService.htm】这样的地址后,我们可以在另外一个程序中这样使用该rpc提供的方法。

以下代码和前面4段没有什么关系,仅随意展示了其一些使用方法,方法名【pushOrderData】并无实际意义,请勿自行关联,以防被误导。

A、invoke的参数:第一个为方法名,第二个为传入方法的参数(对象数组,必须按照顺序存放参数)
B、org.phprpc.util.Cast 是一个PHPRPC封装好的数据类型转换工具类。
public class PhpRpcDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String url3 = "http://localhost:8080/XXXXXX/phprpc/phpRpcService.htm";
PHPRPC_Client client = new PHPRPC_Client(url3);
//PhprpcClient.setEncryptMode(3);
//1获取公钥
Object tempRet = client.invoke("getRsaPulbicKey", new Object[] {}); String tempJsonStr = Cast.toString(tempRet); System.out.println(tempJsonStr); //回调
//test1(client); //Map 和 List 类型
//test2(client); //String类型
String jsons2 = "[{'id':'872'}]";
Object ret = client.invoke("pushOrderData", new Object[] {"1",null,jsons2,null,null});
String s = Cast.toString(ret);
System.out.println(s); */ //也可以以 callback形式调用.
/* client.invoke("say", new Object[] {}, 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();
}
});*/
} private static void test2(PHPRPC_Client client) {
    
AssocArray ret1 = (AssocArray)client.invoke("pushOrderData", new Object[] {"1","","",""});
Map m = ret1.toHashMap();
//Cast.toString(null);
System.out.println(m);
} private static void test1(PHPRPC_Client client) {
Object[] d = new Object[4];
client.invoke("pushOrderData", d,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();
}
}); System.out.println(d);
}
}

最新文章

  1. Java的一些常见问题,JRE,JDK,JVM,包等概念理解
  2. cocos2d-x打飞机实例总结(一):程序入口分析和AppDelegate,Application,ApplicationProtocol三个类的分析
  3. 开发常用之在webstorm中使用cmd
  4. NHibernate系列文章目录
  5. 使用you-get下载视频网站视频或其他
  6. MyEclipse去除网上复制下来的来代码带有的行号
  7. Linq之Expression高级篇(常用表达式类型)
  8. Top Things to Consider When Troubleshooting Complex Application Issues
  9. 【JavaScript】使用面向对象的技术创建高级 Web 应用程序
  10. Golang学习 - strings 包
  11. HDU-3487 Play with Chain Splay tee区间反转,移动
  12. JDBC——架构层、驱动
  13. 将eclipse左边目录结构改为 树形结构
  14. 菜鸟初学redis(二)
  15. Jenkins凭证及任务演示-pipeline(二)--技术流ken
  16. Caused by: Java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;
  17. Failed to auto-configure a DataSource: &#39;spring.datasource.url&#39; is not specified and no embedded datasource could be auto-configured.
  18. cpp 区块链模拟示例(一)工程建立
  19. 你真的了解volatile关键字吗?
  20. java框架篇---hibernate之连接池

热门文章

  1. for...in与点语法
  2. 流畅的python第九章笔记 python风格的python
  3. Mina框架的学习笔记——Android客户端的实现
  4. 使用jquery实现省市二级列表
  5. PHP将两个二维数组合并为一个二维数组的方法
  6. Codeforces Round #166 (Div. 2) A. Beautiful Year【暴力枚举/逆向思维/大于当前数且每个位数不同】
  7. &quot;library not found for - &quot;解决办法
  8. 如何避免CSS :before、:after 中文乱码
  9. Chrome下强制http重定向到https的问题
  10. Android开发实践:Java层与Jni层的数组传递