我应该使用哪种Java RMI / RPC / IPC技术?

前端之家收集整理的这篇文章主要介绍了我应该使用哪种Java RMI / RPC / IPC技术?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个 Java应用程序,它包含一个服务器和一个客户端(将来可能有多个客户端),可以在不同的主机上运行.

对于这两者之间的通信,我目前使用自定义协议,该协议由通过网络套接字发送的JSON消息组成,并且两端都转换回Java Bean对象.然而,应用程序越复杂,我注意到这种方法不符合我的标准并且过于复杂.@H_502_3@

我正在寻找一个完善的,可能标准化的替代方案.@H_502_3@

我已经看过远程方法调用(RMI),但是读到协议很慢(网络开销很大).@H_502_3@

我正在寻找的技术应该是轻量级的(协议和库明智的),健壮的,可能支持压缩(如果它支持大的话!),可能支持加密,良好的文档和完善的(例如Apache项目).它应该像使用RMI调用远程对象上的方法一样简单,但没有缺点.@H_502_3@

你能推荐什么?@H_502_3@

解决方法

Avro是一个专为跨语言RPC而设计的Apache项目(其精神前身见 Thrift).它是相当新的(不到两年),因此它没有像RMI那样完善.不过,你应该给它一个机会;像卡桑德拉这样的大型项目正在转向Avro. Avro也是Hadoop下的一个子项目,并且一直得到该社区的健康支持.

它旨在快速支持多种语言,因此您可能需要在编译期间引入另一个步骤,将Avro IDL文件转换为Java,尽管这不是绝对必要的.其余的是典型的RPC.@H_502_3@

Avro的一个好处是它的传输层与数据的表示方式无关.例如,它为原始套接字,HTTP甚至本地进程内调用提供了各种“收发器”(它们的基本通信类). HTTPS和SASL收发器可以提供安全性.@H_502_3@

为了表示数据,有各种类型的编码器和解码器,虽然默认的BinaryEncoder通常就足够了,因为Hadoop,Cassandra等……专注于效率.如果您发现有用,还有一个JsonEncoder.@H_502_3@

猜你在找的Java相关文章