我正在开发一个Java应用程序,它包含一个服务器和一个客户端(将来可能有多个客户端),可以在不同的主机上运行.
对于这两者之间的通信,我目前使用自定义协议,该协议由通过网络套接字发送的JSON消息组成,并且两端都转换回Java Bean对象.然而,应用程序越复杂,我注意到这种方法不符合我的标准并且过于复杂.
我正在寻找一个完善的,可能标准化的替代方案.
我已经看过远程方法调用(RMI),但是读到协议很慢(网络开销很大).
我正在寻找的技术应该是轻量级的(协议和库明智的),健壮的,可能支持压缩(如果它支持大的话!),可能支持加密,良好的文档和良好的建立(例如Apache项目).它应该像使用RMI调用远程对象上的方法一样简单,但没有缺点.
你能推荐什么?
Avro是一个专为跨语言RPC设计的Apache项目(请参阅Thrift的精神前身).它是相当新的(不到两年),因此它没有像RMI那样完善.不过,你应该给它一个机会; 像卡桑德拉这样的大型项目正在转向Avro.Avro也是Hadoop下的一个子项目,并且一直得到该社区的健康支持.
它旨在快速并支持多种语言,因此您可能需要在编译期间引入另一个步骤,将Avro IDL文件转换为Java,尽管并非绝对必要.其余的是典型的RPC.
Avro的一个好处是它的传输层与数据的表示方式无关.例如,它为原始套接字,HTTP甚至本地进程内调用提供了各种"收发器"(它们的基本通信类).HTTPS和SASL收发器可以提供安全性.
为了表示数据,有各种类型的编码器和解码器,尽管默认的BinaryEncoder通常就足够了,因为Hadoop,Cassandra等......专注于效率.如果您发现有用,还有一个JsonEncoder.
| 归档时间: |
|
| 查看次数: |
6253 次 |
| 最近记录: |