最近发现以前做的采用FLEX前台通过HTTPSERVICE方式与JAVA后台交互的方式在使用LR进行测试时负载敏感很高.之前选择HTTPSERVICE的原因第1是因为很熟悉,服务器端的代码相当于传统的AJAX应用,第2是因为考虑到BlazeDS的Remote Object方式的话配置很麻烦,虽然今后只需要维护后台的java对象结构,但是对于其他接入方式支持不了,同时也限制了界面的显示方式.所以就算早知道HTTPSERVICE性能一般也将就着用了.现在看来不得不考虑其他的PRC组件,在网上搜索了一下,找到了个叫做PHPRPC的东东.回忆起来,好象以前表弟说过他们用PHP+FLEX做WEBGAME的时候使用的就是这个东西.只不过一听名字就知道是PHP的没注意.稍微看了下,已经发展到3.0版本,支持10几种主流语言.(http://www.phprpc.org/zh_CN/) OK,谁叫它起这么个死板的名字,不过好象一开始就是针对PHP的....
不用不知道,一用真奇妙!从查看资料到下载到最后完成与JAVA/JS/FLEX客户端的交互,总共花了1个小时!OMG,自认自己资质一般,只能说明这个东东简直太神奇太简单了...所以就写下自己的一些心得与大家分享.
首先,到http://www.phprpc.org/zh_CN/download/下载3个版本,分别是对应JAVA/JS/AS3.0的支持.
解压JAVA版本,找到其中的一个make.bat的批处理文件,运行后则自动将源码编译打成JAR包,然后将phprpc.jar添加进项目的构建路径.这样JAVA客户端的环境就完成了.下面开始编写并发布服务.
首先我们按照习惯编写一个业务接口和实现类
package service;
import model.User;
public interface TestService {
public String sayHello(String name);
public void sayGoodBye();
public void showUser(User u);
public User getUser();
}
package service;
import model.User;
public class TestServiceImpl implements TestService {
public String sayHello(String name) {
return "hello,"+name;
}
public void sayGoodBye() {
System.out.println("bye bye");
}
public void showUser(User u) {
System.out.println(u.getName()+" "+u.getPassword());
}
public User getUser() {
User u = new User();
u.setName("jr");
u.setPassword("123");
System.out.println("invoke getUser()");
return u;
}
}
4个方法,分别做了简单的预定义类型和自定义类型地测试,User代码如下
package model;
import java.io.Serializable;
public class User implements Serializable{
public User(){
}
String name;
String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
需要注意的是,如果想要在客户端接收User对象的话,必须实现序列化接口.(接口,序列化 一看就晓得是远程调用^_^).
接下来我使用一个SERVLET来发布服务,当然你也可以简单地使用一个JSP.
public class TestAction extends BaseAction {
public void test(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
PHPRPC_Server ps = new PHPRPC_Server();
TestService testService = new TestServiceImpl();
//发布服务 注册TestService接口中的sayGoodBye sayHello showUser getUser4个方法
ps.add(new String[]{"sayGoodBye","sayHello","showUser","getUser"},testService);
ps.start(request, response);
}
}
BaseAction以及web.xml的配置不再多说废话了,总之这个SERVLET的url-pattern为/t.do,即访问它的URL为http://主机:port/应用程序名/t.do?m=test
我们先用JAVA来充当客户端调用
package client;
import org.phprpc.PHPRPC_Client;
import service.TestService;
public class JAVAClient {
static final String URL = "http://localhost:8888/t/t.do?m=test";
/**
* @param args
*/
public static void main(String[] args) {
PHPRPC_Client client = new PHPRPC_Client(URL);
TestService testService =
(TestService) client.useService(TestService.class);
System.out.println(testService.sayHello("fw"));
testService.sayGoodBye();
}
}
成功地话应该在控制台看到"hello,fw"以及"bye bye".
OK,接下来是JS中的使用,请大家注意和传统的AJAX以及DWR比较.
首先将之前下载的对应JS版本的压缩包解压,找到4个JS文件并在页面上引入,分别是phprpc_client.js,xxtea.js,bigint.js,phpserializer.js,base64.js,utf.js.
JS代码如下
<script type="text/javascript">
var URL = "http://localhost:8888/t/t.do?m=test";//引用服务的URL
//按扭事件
function t(){
var info = document.getElementById("info");
var rpc_client = new PHPRPC_Client(URL,["sayHello","sayGoodBye","showUser","getUser"]);
//调用sayHello
rpc_client.sayHello("fw",function(result){
info.innerHTML=result;
});
rpc_client.sayGoodBye();//调用sayGoodBye
//调用showUser 参数为一个json格式的User对象 会自动转换
var user = {name:"fw",password:"123"};
rpc_client.showUser(user);
//调用getUser
rpc_client.getUser(function(result, args, output, warning){
alert(result.name);
});
}
</script>
是不是觉得和DWR很相似?但是不要忘了自始自终我除了拷贝1个JAR和几个js文件外,没有做任何地配置.比起DWR,WEBSERVICE来说PHPRPC具备几个优势:
1.使用,部署简单,只需要几个JAR或JS文件,无需配置
2.常用API非常简单
3.JAVA对象--JS对象--AS对象之间相互转换无需做任何配置
4.传输性能高效(http://www.iteye.com:80/topic/333720)
一句话,用起来非常地爽!比起所谓的SOAP,我认为PHPRPC才称得上是真正的"简单的""轻量的".
分享到:
相关推荐
**轻量级SOAP---PHPPRC详解** 在IT行业中,远程过程调用(Remote Procedure Call,简称RPC)是一种常用于分布式系统的技术,它允许程序在不同的网络节点间调用彼此的功能,就像是本地调用一样。PHP作为广泛使用的...
赠送jar包:cxf-rt-bindings-soap-3.0.1.jar; 赠送原API文档:cxf-rt-bindings-soap-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-bindings-soap-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-bindings-soap-...
jakarta.xml.soap-api-1.4.2.jar jakarta.xml.soap-api-1.4.2-javadoc.jar jakarta.xml.soap-api-1.4.2-sources.jar
与soap-ui相比,虽然soap-ui是一款强大的SOAP测试工具,它允许用户图形化地创建、编辑和发送SOAP请求,同时提供详尽的响应分析和测试套件管理功能。然而,“soap-build”更专注于代码生成,特别是在持续集成(CI)和...
Soap - ScriptableObject 架构模式 Soap提供了一套工具,使您能够以简单、模块化和可重用的方式构建您的游戏。 厌倦了意大利面代码吗? Soap提供了无代码解决方案来解决常见的意大利面代码问题,让您可以: 在场景和...
SOAP-2_3_1是一个特定版本的SOAP开发包,它为开发者提供了便利,使他们能够轻松地创建、部署和使用SOAP Web服务。 在SOAP-2_3_1这个版本中,我们可以期待一些关键特性: 1. **API接口**:SOAP包通常包含一组API,...
在“soap-bin-2.0.zip”这个压缩包中,包含的“soap-2_0”可能是一个实现了SOAP 2.0规范的库、工具或示例代码。这个文件可能帮助开发者理解如何创建、发送和接收SOAP请求,以及如何处理响应。SOAP 2.0可能引入了新的...
安卓sdk找不到的api,因此需要引入额外的jar包1
QtSOAP-2.7_1 是一个开源的库,它为Qt框架提供了SOAP(Simple Object Access Protocol)的支持。SOAP是一种基于XML的协议,用于在Web服务中交换结构化和类型化的信息。QtSOAP使得Qt开发者能够轻松地创建客户端和...
1. **SOAP协议**:SOAP是一种轻量级的、基于XML的协议,用于在Web上交换结构化和类型化的信息。它允许应用程序通过HTTP等传输协议发送和接收数据,使其成为Web服务通信的理想选择。 2. **javax.xml.soap** 包:这是...
该源码包"qtsoap-2.6-opensource"包含了完整的源代码,使得开发者可以深入理解其工作原理,并根据需要进行定制和扩展。在源码包中,我们可以找到以下关键组成部分: 1. **头文件**:这些文件(通常以 `.h` 结尾)...
SOAP(Simple Object Access Protocol)是一种基于 XML 的轻量级协议,用于在网络上交换结构化的信息。SOAP 使用 HTTP 或 SMTP 等协议作为传输协议,将 XML 数据封装在 SOAP 消息中,以实现不同系统之间的数据交换...
npm install easy-soap-request 要求 Node.js> = 7.6.0(异步/等待支持) 用法 Node.js const soapRequest = require ( 'easy-soap-request' ) ; const fs = require ( 'fs' ) ; // example data const url = '...
综上所述,"qt-soap-webservice"项目提供了一个在Qt 5环境下使用SOAP协议与Web服务进行交互的实例。它涵盖了HTTP请求、XML文档的构造和解析等关键知识点。开发者可以通过学习这个项目,理解如何在Qt应用程序中集成...
"soap-bin-2.3.1.zip"是一个包含SOAP库版本2.3.1的压缩包,适合对SOAP技术感兴趣或者需要在项目中使用SOAP服务的开发者。 1. SOAP架构基础:SOAP消息通常由三部分组成:Header、Body和Envelope。Header包含了与消息...
突破jdk与wsdl第三方对xml文本解析领域割据趋势,该脚本既可以支持普通xml解析,也支持soap-xml第三方xml文本的解析; 极大的节省了引入冗余jar资源; 纯底层算法解析,不依赖任何第三方工具包,自主产权维护性强。
SOAP-4.5是SOAP的一个版本,它在早期的SOAP版本基础上进行了优化和增强,旨在提供更高效、更可靠的服务交互。在这个主题中,我们将探讨SOAP-4.5的主要特点以及如何使用它来连接WSDL文档。 SOAP-4.5的主要改进可能...
1. **SOAP协议**: SOAP是一种轻量级的协议,它允许应用程序通过HTTP或其他传输协议来交换数据。SOAP消息是XML文档,包含了方法调用、参数、返回值等信息,使得不同系统间的数据交互变得更加简单。 2. **JAF (Java ...
总结来说,"cxf-rt-bindings-soap-2.7.6.zip"是一个用于构建和使用SOAP Web服务的开源工具,而"text.zip,分隔标记/注释文本模型"则可能涉及到数据处理和文本分析的特定方法。这些资源结合了现代Web服务开发的关键...