rmi vs servlets vs socket

时间:2011-04-27 01:49:56

标签: java sockets servlets rmi

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

3 个答案:

答案 0 :(得分:29)

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

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

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

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

简而言之:

  • 套接字用于低级网络通信
  • RMI适用于高级Java-to-Java分布式计算
  • Servlet用于实现网站和Web服务

答案 1 :(得分:6)

  1. 套接字 - 很少直接与TCP / IP接口的简单调用。非常简单,但你要掌握自己的缓冲区处理,并处理自己不完整的响应和超时。没有提供身份验证或安全性。

  2. rmi - 处理上述所有内容,<个人意见>其中一个更糟糕的API污染了java标准< / personal opinion>,编程相当简单,处理基本网络错误,身份验证和安全问题。难以配置和部署。

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

答案 2 :(得分:2)

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

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

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