WAYNE的ORACLE 2013-05-06
其实我还根本不懂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,毕竟他已经很优秀了。
----------------------------------------------------------------------------------------------------------------------------