使用json-rpc实现delphi+java异构语言RPC调用

之前论坛中有讨论到采用“客户端用delphi写,服务器端用java写”的异构语言方案,当中曾提出采用soap、corba、xml-rpc等方式实现两种开发语言间的数据交换和远程方法调用,其中 一蓑烟雨任平生 曾提议就以下方面展开论题

一蓑烟雨任平生 写道
我们能否这样展开话题:
客户端通过XMLHTTP进行请求处理的技术;
客户端和服务器端传递的数据格式;
如何处理上下文信息;
如何设计服务器端的接口;
如何利用XML数据源进行客户端数据处理等等;

 

在实际开发过程中,我曾使用socket+自定义报文格式、xml-rpc、soap等方式实现delphi客户端调用java远程接口,但总的来说,上述方式都存在明显的局限性

  • socket+自定义报文格式:虽然在性能上报文解析明显要好于xml,但要实现复杂对象基于报文格式的序列化还是有很多局限性(当初到后来采用了xml+报文混合方式,复杂对象使用xml序列化,并以报文方式传递给客户端),同时在实际开发过程中发现,由于采用私有的实现方式,框架说明文档欠缺、开发技术力量有限等因素,新人学习和框架不断维护升级也是不小的工作量;
  • 之后采用xml-rpc方式来实现delphi+java rpc调用,对于数据交换频率低、一次性大数据量同步此方式是不错的选择,但是对于频繁的业务方法调用、大数据量查询统计等应用,存在一个明显的问题:xml解析性能问题,特别是delphi端xml解析非常耗资源,并且非常慢;为了解决xml解析性能问题,考虑采用了数据分页返回方式来实现,这样一来性能问题只是部分缓解,同时也带来了不必要的开发工作量;
  • 至于soap,除了有好的工具支持外,开发复杂性、性能等都是存在问题的;做了一组测试后就放弃了;

在最近的开发过程中,无意中发现json其实不错的数据交换方案。

 

Delphi和Java使用json格式交换数据,采用HTTP协议,可结合安全套接字实现交换数据安全性,服务器端通过json-rpc方式export远程调用接口,结合delphi indy session控件实现cookie机制。

 

通过初次尝试,在性能方面基本上没有明显的问题,特别是大容量数据交换性能表现不错,目前Java端使用jabsorb 实现框架,Delphi端使用JSON Toolkit 实现框架,比较之前方案,个人觉得在以下方面得到了改进:

  • java端对象-json间的序列化/反序列化可以不需要编写任何代码,jabsorb框架可以自动的处理对象序列化;但是delphi需要根据java端的序列化情况还是需要手工编写相应的序列化代码;不过相比较xml-rpc、自定义报文方式,还是减少了一半工作量;
  • json和json-rpc规范相当简单(xml-rpc也是非常简单的),新人入门学习看了官方文档基本可以理解,比我自己编写相比较,简洁明了,容易理解;
  • 性能表现不错,基本上1、2万条记录传递、解析在2~3秒钟时间可以完成;
  • delphi端调用java端远程服务接口比较直观,参考xml-rpc实现,针对JSON Toolkit稍作封装即可;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值