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

本文探讨了Hessian框架的特点,包括其跨平台能力、多语言支持和性能表现,并对其支持的不同语言间的互操作性和二进制序列化进行了深入讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实我还根本不懂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的名称在客户端和 服务器端是一致的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值