hessian支不支持多种语言的调用?

其实我还根本不懂Hessian这个东西,但是我习惯用以后的经验来分析。

‍Hessian适合Remoting/WCF比较相似的一类东西,都是提供远程调用的框架,不过‍Hessian的最大优势在于跨平台,多语言支持和比较合理的性能,目前‍Hessian支持:

‍Java

Flash/Flex

Python

C++

.NET C#

D

Erlang

PHP

Ruby

Objective C

没听说过的就有D和Erlang,没用过的那就很多了,不过其实如果用C语言写一套,这些都是可以调用的>.<(至少是大部分)。我注意Hessian并不是一个人来完成的,很多语言的实现并不是同一个人,所以这里把‍Hessian成为一套标准更合适。

据我目前掌握的资料来看‍Hessian是使用二进制序列化的,同样支持Http-Invoke,目前的状况下我又几个问题:

‍Hessian是否支持不同语言的相互调用?‍Hessian虽然实现了多种语言,但是很可能是C++版本的只能调用C++版本的,而不能调用其他,能不能实现C++远程调用Java?Java远程调用C++?

这 里有个公共类型的问题,C++和Java,或者说这些语言之间并没有.net平台上的CTS(公共类型系统),也就是说A拥有的类型B就可能没有,如果类 型都不能统一,如何实现远程调用呢?我在C#下压入一个delegate类型,C++根本不能处理这个东西。这并不是个例,所以不同语言之间的互操作我认 为是不可行的,Java没法构建C++类型,反过来一样。

当然对于一些语言之间,可以进行类型转换,比如Java和C#,他们有很多共有的类型,但是比如C++和Java,前者根本没有interface类型。

(如果能实现不同语言互操作,那‍Hessian真神了,一定要膜拜下)

二进制序列化的问题。

二 进制序列化效率很高,C++这种语言也可以自定义序列化过程(事实上我认为必须自定义,因为C++没有类似C#反射的能力,也就无法自动的序列化)。但是 二进制序列化是不是会存在大端小端,字节对齐,不同平台的数据格式的问题,C++作为本地语言,不能像C#或者Java那样就规定了一种内存数据格式,所 以在不同架构的平台之间用二进制序列化是不可行的。

目前想到的就这么多,我希望继续了解一下这个东西‍Hessian,毕竟他已经很优秀了。

----------------------------------------------------------------------------------------------------------------------------

为什么服务器端是List对象,到了客户端就是hashmap了呢?????
原 因:我的list在上传前保存的是对象,经测试也不是map型,但到服务端从list获取的变成了map型,经分析是因为目录结构的原因,如果客户端和服 务器端package的名字不一样的话,就会造成服务端反序列化时出现问题。所以在使用List的时候一定要让bean的package的名称在客户端和 服务器端是一致的。

猜你喜欢

转载自huyumin.iteye.com/blog/1860239
今日推荐