`
lvff1314
  • 浏览: 11816 次
  • 性别: 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)

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包7

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Java资源包01

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics