rmi vs servlets vs socket

socket编程,rmi和Servlets之间有什么区别。 什么时候用?

Socket API是Java应用程序与网络交互的低级(传输级)抽象,并通过远程客户端和服务进行扩展。 套接字和相关API支持可靠的字节流和不可靠的消息传递服务。 它们通常用于TCP / IP和UDP / IP,但是其他网络协议栈可以(至少在理论上)得到支持。

RMI是用于在Java应用程序之间实现应用程序级网络的框架和协议系列。 它将网络交互建模为针对生活在其他应用程序中的对象的Java方法调用。 此模型需要一种机制(通常是名称服务器),允许一个应用程序“发布”对象,以便另一个应用程序可以引用它们。 这(以及RMI端口通常默认被阻止的事实)意味着在设置基于RMI的应用程序时需要进行大量的配置工作。

Servlet是API的集合, 主要用于实现HTTP通信的服务器端; 即用于在Java中构建Web服务器。 它们(或者更准确地说是它们运行的​​Web容器)负责处理HTTP协议的细节,因此程序员(理论上)只需要处理“应用程序”问题。

实际上,servlet开发人员和/或部署人员必须处理其他事情,例如将URL映射到servlet到对象,安全性和身份validation。 此外,Servlet只处理HTTP交互的服务器端……客户端必须由不同的API处理。 (您也可以认为Servlet本身做得不够,可以通过构建在Servlet之上的Web应用程序框架的扩散来certificate。)

简单来说:

  • 套接字用于低级网络通信
  • RMI适用于高级Java-to-Java分布式计算
  • Servlet用于实现网站和Web服务
  1. 套接字 – 很少直接与TCP / IP接口的简单调用。 非常简单,但你要掌握自己的缓冲区处理,并处理自己不完整的响应和超时。 未提供身份validation或安全性。

  2. rmi – 处理上述所有内容,<个人意见>它是污染java标准的最糟糕的API之一,编程相当简单,处理基本的网络错误,身份validation和安全问题。 难以配置和部署。

  3. Servlets – 可爱的简单API,为您处理所有网络问题,通过插件进行安全性和身份validation。 没有部署问题,配置简单。

使用套接字实现特定的TCP / IP协议,无论是现有标准还是您自己的自定义协议。 您可以完全控制网络通信的各个方面。

Servlet支持一般意义上的请求/回复语义,但是您更有可能使用HTTPServlet,它支持HTTP请求/回复语义。 例如,Web服务器或基于RESTful HTTP的端点。

将RMI用于分布式Java对象。 RMI本身是使用套接字实现的(见上文)并实现了Java Wire Protocol。