Java中的网络通信选项(客户端/服务器)

有一个RMI,我理解它是相对脆弱的,直接的Socket连接,这是相当低级别的,而字符串,虽然它一样坚实,但似乎是隐喻的PHP。

对于基于Internet的客户端/服务器通信,我有哪些基本选项? 有什么优点/缺点? 我应该考虑哪些问题? 第三方库建议很好,只要它们保持平台独立(即没有限制性的本机代码)。

寻找选项,而不是一个明确的答案,所以我将我自己的要求的细节留空。

正如您指定的“基于互联网”,对于基于HTTP的RESTful方法有很多话要说(我已经强调了您应该考虑的一些问题):

优点:

  • 您可以使用/滥用服务器端的无数Web层框架之一(例如Spring MVC , Play! )
  • 低级工作已经在客户端完成 (Apache HTTPClient)
  • 纯文本协议易于在线上调试
  • 可用于帮助您调试交互的大量工具(例如SoapUI ) – 您可以伪装成客户端OR服务器,因此可以单独开发直到另一端准备就绪
  • 使用一个众所周知的端口 (80/443)可以更轻松地冲破企业防火墙

缺点:

  • 有一个相当重要的假设,即服务器将占据最大份额的工作 – 如果你的模型是“倒置的”,那么RESTful可能没有多大意义
  • 原始性能将低于基于线上插件的方法
  • 纯文本协议很容易在线上嗅探 (SSL可以解决这个问题)

“相对脆弱”是什么意思? RMI的问题与它在狭窄基础上的大型上层结构有关,特别是它对DNS和对象序列化的依赖性很大。 你越接近硅片,任何程序变得越“脆弱”,但你需要编写的代码越多。 这是一个权衡。 我不是一个独眼的RMI支持者,尽管写了一本关于它的书,但“脆弱性”太过强硬了。 它做它做的事情,它做得相当好。 如果您需要大规模可扩展性,RMI / IIOP在许多方面都会做得更好。 如果您对世界的看法是一次最远的远程方法调用而没有太多安全性,RMI / JRMP将为您提供。 从模型中获得的越多,应用就越难。