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