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

时间:2011-10-02 23:13:15

标签: java networking protocols rmi

有一个RMI,我理解它是相对脆弱的,直接的Socket连接,这是相当低级别的,而Strings,虽然它实际上是可靠的,但似乎是隐喻的PHP。

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

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

2 个答案:

答案 0 :(得分:2)

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

优点:

  • 您可以为服务器端使用/滥用众多网络层框架之一(例如Spring MVCPlay!
  • 低级别工作已在客户端完成(Apache HTTPClient)
  • 纯文本协议很容易在线调试
  • 可用于帮助您调试交互的大量工具(例如SoapUI) - 您可以伪装成客户端OR服务器,因此孤立地开发,直到另一端为就绪
  • 使用众所周知的端口(80/443)可以更轻松地打击企业防火墙

缺点:

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

答案 1 :(得分:0)

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