`
lvff1314
  • 浏览: 11974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于Hessian的C++客户端与java服务端通信

阅读更多
    之前一篇文章里提到了通过扩展hessian的java客户端源码来实现client与server通信过程中的session机制。
    这样一来,使用hessian做java客户端的确没有太多问题了,也意味着android版本在通信方面问题解决了;随之而来的是iOS版本,大家都知道,iphone开发所使用的语言是Object-C,但实质是C++,所以我的项目中,首先还要保证Hessian的C++版本能够与服务端正常通信,于是用C++版本的client api做简单的测试后发现,C++版本调用服务端后,对于复杂数据结构情况,C++程序将其解包成一个Hessian的C++版本封装好的Map结构,也就是说,自定义类型的数据结构均以Map的形态在C++中存在,这与我最初的RPC设想还是有差别的,如果客户端的开发人员使用Map进行逻辑开发,就以为着,当接口传输结构需要修改的时候,需要client开发人员对源代码进行反复修改,且容易将一些bug隐藏。

     既然问题已经明确,那随之而来的就是寻求解决方案了,C++版本之所以不支持自定义对象结构在client的逻辑开发中使用,一个最主要的原因是因为C++不像java那样有反射机制(当然Objective-C中可能存在,但我们还是需要C++版本)。最终我的解决方案是:
1、当服务定义逻辑接口以及接口中所使用的参数及返回值后,使用ant进行编译;
2、ant编译的过程中,调用已经为C++写好的模板(velocity或freemarker等)生成C++接口及传输类的代码;
3、将新的C++代码上传版本控制器;
4、客户端更新版本后可使用。
这样,C++客户端也有了真正意义的如同本地调用一样的RPC,且支持复杂对象结构的使用。

当然以上的改造对C++版本的hessian客户端源码进行了几行的修改,大部分工作已扩展为主。

以上只说明了方案,未将C++代码贴出,C++部分为公司其他人开发。在这里我只希望对有相同需求的朋友提供一个已经被验证过的解决方案,如果谁有更好的解决方式欢迎指教。
分享到:
评论
2 楼 hhb19900618 2012-02-03  
兄弟 那意思是目前ios不能使用hessian去解析吗?
1 楼 zhongji 2011-06-09  
请教下为啥我的c++ client访问老是报这个错:
严重: Servlet.service() for servlet remoting threw exception
java.io.IOException: expected 'c' in hessian input at -1
at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:77)
at org.springframework.remoting.caucho.HessianExporter.invoke(HessianExporter.java:142)
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:70)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)

相关推荐

    【Android】使用Hessian与Java服务端通讯

    本文将详细介绍如何在Android客户端中使用Hessian与Java服务端进行通讯。 **一、Hessian概述** Hessian是由Caucho公司开发的一种基于HTTP的二进制RPC协议。它的主要优点包括: 1. **压缩传输**: Hessian采用二进制...

    hessian vc实现

    Hessian是一种高效的二进制序列...通过理解Hessian协议的原理和选择合适的库,你可以构建一个高效的C++客户端来与Hessian服务端进行交互。在实际项目中,确保对各种异常情况有充分的考虑,以提高软件的稳定性和可靠性。

    Java Hessian小试(转)

    它旨在提供轻量级、高效的跨语言通信方式,尤其适合于Java与Java之间的通信,但同时也支持与其他语言如Python、C++等的交互。Hessian的目标是简化分布式服务的实现,通过序列化对象为二进制格式,减少网络传输的数据...

    hessian实现远程调用

    总之,Hessian作为一种高效的远程调用解决方案,简化了客户端和服务端之间的通信,使得跨网络调用变得简单而高效。在实际开发中,合理地使用Hessian可以提高系统的可扩展性和可维护性。然而,随着微服务架构的普及,...

    使用hessian进行服务器-客户端通讯

    4. **建立连接**:客户端通过URL(通常包括服务端的IP地址和端口号,以及Hessian服务的路径)与服务器建立连接。这个URL就是客户端调用Hessian服务的入口。 5. **调用服务**:一旦连接建立,客户端就可以像调用本地...

    Hessian Binary Web Service Protocol远程接口调用入门Demo

    2. 在客户端运行`HessianClient.java`,创建Hessian客户端并调用服务端的方法。 3. 观察输出结果,确认远程调用成功。 通过这个简单的Demo,你将能够深入理解Hessian的工作原理和使用方式。在实际项目中,你可以...

    hessian

    4. **跨语言支持**:虽然最初是为Java设计的,但Hessian也有其他语言的实现,比如Python、C++、C#等,因此可以在多种语言之间进行通信。 在【描述】中提到的博客链接,可能详细介绍了如何使用Hessian进行客户端和...

    hessian示例远程轻量级传输

    通过上述示例,我们展示了如何在Java中设置Hessian服务端和客户端。了解并掌握Hessian,可以帮助你构建更加高效、灵活的分布式系统。在实际项目中,根据需求,还可以结合Spring框架等进行更高级的集成和配置。

    hessian入门小例子

    Hessian是一种轻量级的RPC(远程过程调用)协议,它主要用于Java和C++之间进行高效的二进制通信。这个“Hessian入门小例子”是帮助开发者理解如何在实际项目中应用Hessian的一种方式。下面我们将深入探讨Hessian协议...

    利用hessian进行系统通信实例教程

    Hessian支持Java、C++、Python等多种编程语言,能够实现不同语言间的无缝通信。 二、Spring与Hessian的结合 Spring是一个广泛应用的开源Java框架,它提供了丰富的功能来简化企业级应用的开发。在Spring中集成...

    hessian-4.0.33.jar

    3. 跨语言通信:Hessian支持多种编程语言,如Java、C++、.NET,实现跨平台的通信。 总结,hessian-4.0.33.jar是Hessian框架的一个版本,提供了实现高效二进制RPC服务的工具集。通过深入理解Hessian协议和这个库的...

    Hessian(Spring集成的)的应用与研究

    Hessian支持Java、C++、Python等多种语言,便于跨平台的远程调用。 二、Spring集成Hessian Spring通过其AOP(面向切面编程)和IoC(控制反转)理念,为Hessian提供了便捷的整合方式。在Spring中,我们可以定义一个...

    hessian简单实例

    - **跨语言支持**:Hessian不仅支持Java,还支持其他语言如C++,Python等,这使得多语言间的通信变得简单。 - **动态类型**:Hessian可以处理动态类型,无需预先定义复杂的接口或者数据结构。 - **透明性**:对于...

    Hessian例子.rar

    Hessian是一种二进制Web服务协议,它提供了一种高效的序列化和远程调用机制,使得客户端和服务端之间可以快速地交换数据和方法调用。Hessian的目标是简化分布式应用程序的开发,通过减少网络传输的数据量,提高服务...

    Web Service Hessian 开发

    Hessian支持Java、C++、Python等多种语言,可以实现跨平台的通信。 二、Hessian服务端开发 在Java环境下,我们可以使用Caucho公司的Hessian库来创建Hessian服务。首先,我们需要定义一个服务接口,例如: ```java...

    Hessian学习简单demo

    Hessian是一种二进制协议,它被设计用于提高远程调用的效率,特别是在Java和C++之间进行跨语言通信时。Hessian的目标是提供一种快速、简洁的数据序列化和远程方法调用(RPC)机制。在这个简单的demo中,我们将探讨...

    Hessian(纯)的应用与研究

    - **跨语言支持**:虽然最初是为Java设计,但Hessian也支持其他语言,如C++, Python等,这使得跨平台通信变得简单。 - **透明性**:对于开发者而言,Hessian调用就像本地方法调用一样,无需关注网络通信的细节。 ...

    Hessian学习笔记

    4. **Hessian客户端和服务器实现**:理解如何在Java或其他支持的语言中实现Hessian客户端和服务端是学习的关键。这包括创建服务端的HessianServlet,以及客户端的HessianProxyFactory,用于创建远程服务的代理对象。...

    hessian与spring整合的jar包

    它支持Java、C++、Python等多种语言,常用于服务端和客户端之间的轻量级通信。 Spring框架是Java应用开发的核心框架,它提供了一个全面的编程和配置模型,简化了企业级应用的开发。Spring包含了许多模块,如核心...

    Hessian 入门介绍

    4. **自动类型推断**: Hessian可以自动识别并处理Java、C++等多种语言中的基本类型和复杂对象,使得跨平台通信更为便捷。 ### 二、Hessian的工作原理 1. **序列化**: 在服务端,Hessian将Java对象转换为二进制流,...

Global site tag (gtag.js) - Google Analytics