【发布时间】:2011-08-13 11:57:00
【问题描述】:
socket 编程、rmi 和 Servlet 有什么区别。什么时候用什么?
【问题讨论】:
socket 编程、rmi 和 Servlet 有什么区别。什么时候用什么?
【问题讨论】:
使用套接字来实现特定的 TCP/IP 协议,无论是现有标准还是您自己的自定义协议。您可以完全控制网络通信的各个方面。
Servlet 支持一般意义上的请求/回复语义,但您更有可能使用支持 HTTP 请求/回复语义的 HTTPServlet。例如,Web 服务器或基于 RESTful HTTP 的端点。
将 RMI 用于分布式 Java 对象。 RMI 本身是使用 Sockets 实现的(见上文)并实现了 Java Wire 协议。
【讨论】:
Socket API 是 Java 应用程序与网络交互以及与远程客户端和服务交互的低级(传输级)抽象。 Socket 和相关的 API 支持可靠的字节流和不可靠的消息服务。它们通常用于 TCP/IP 和 UDP/IP,但可以(至少在理论上)支持其他网络协议栈。
RMI 是一个框架和协议族,用于在 Java 应用程序之间实现应用程序级网络。它将网络交互建模为对存在于其他应用程序中的对象进行的 Java 方法调用。该模型需要一种机制(通常是名称服务器),该机制允许一个应用程序“发布”对象,以便另一个应用程序可以引用它们。这(以及 RMI 端口通常默认被阻止的事实)意味着在设置基于 RMI 的应用程序时需要进行大量的配置工作。
Servlet 是 API 的集合,主要用于实现 HTTP 通信的服务器端;即用于在 Java 中构建网络服务器。它们(或者更准确地说是运行它们的 Web 容器)负责 HTTP 协议的细节,因此程序员(理论上)只需要处理“应用程序”问题。
实际上,servlet 开发人员和/或部署人员必须处理其他事情,例如将 URL 映射到 servlet 到对象、安全性和身份验证。此外,Servlet 只处理 HTTP 交互的服务器端……客户端必须由不同的 API 处理。 (您也可以争辩说 Servlet 本身做得还不够,这可以从构建在 Servlet 之上的 Web 应用程序框架的激增中得到证明。)
简而言之:
【讨论】:
Socket 等效的功能,则您可以(理论上)在不使用 Socket API 的情况下实现 servlet;例如在本机代码中。
套接字——很少有直接与 TCP/IP 接口的简单调用。非常简单,但是您可以实现自己的缓冲区处理并自己处理不完整的响应和超时。不提供身份验证或安全性。
rmi -- 处理上述所有问题,它是污染 java 标准的最糟糕的 API 之一个人意见>,编程相当简单,处理基本的网络错误、身份验证和安全性问题。难以配置和部署。
Servlets -- 可爱的简单 API,为您处理所有网络问题,通过插件进行安全和身份验证。没有部署问题,配置简单。
【讨论】: