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

标签 java ipc rmi rpc

我正在开发一个 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/

相关文章:

java - RMI 和引用/代理类

java - LWJGL 无法使用 OpenGL 3.2 或更高版本

java - 递归调用后变量值未更新

c++ - 如何在 C++ 中同时写入和读取文件

windows - 点对多点进程间通信

c - 在子进程调用 exec() 之后使用 pipeline()

java - 使用 RMI 传输文件

java - 为 RMI 注册表创建 Windows 服务

不同语言的Java String错序拼接

java - 在适配器类中获取 ArrayIndexOutOfBoundsException