【问题标题】:rmi vs servlets vs socketsrmi vs servlet vs sockets
【发布时间】:2011-08-13 11:57:00
【问题描述】:

socket 编程、rmi 和 Servlet 有什么区别。什么时候用什么?

【问题讨论】:

    标签: java sockets servlets rmi


    【解决方案1】:

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

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

    将 RMI 用于分布式 Java 对象。 RMI 本身是使用 Sockets 实现的(见上文)并实现了 Java Wire 协议。

    【讨论】:

      【解决方案2】:

      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 应用程序框架的激增中得到证明。)

      简而言之:

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

      【讨论】:

      • 我喜欢这个答案,但我不满意。我希望了解 servlet 和套接字之间的关系。 servlet 是否依赖于套接字。
      • @KatedralPillon - “servlet 是否依赖于套接字。” - 在 API 级别,不。在实施时,可能是的。如果您的 servlet 只与主机上的客户端通信,或者您自己实现了与Socket 等效的功能,则您可以(理论上)在不使用 Socket API 的情况下实现 servlet;例如在本机代码中。
      【解决方案3】:
      1. 套接字——很少有直接与 TCP/IP 接口的简单调用。非常简单,但是您可以实现自己的缓冲区处理并自己处理不完整的响应和超时。不提供身份验证或安全性。

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

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

      【讨论】:

      • 这是我的看法——我知道有些人只是喜欢 RMI,但我发现涉及的类和接口太多了,它是一个需要调试的 PITA,API 鼓励使用多种方法的编码风格通过部署在现实网络中时死亡的网络调用。所有这些都可以忍受,但是,部署问题只是一个表演障碍。一旦超过 100 台客户端计算机,客户端和服务器类需要完全匹配,这将变得无法管理。
      • 您的意见虽然很有趣,但并不能回答问题,而且您提到的“表演终结者”问题是无效的。
      猜你喜欢
      • 2016-12-01
      • 2011-01-02
      • 2018-10-08
      • 2019-12-18
      • 1970-01-01
      • 2012-11-24
      • 2017-11-26
      • 1970-01-01
      • 2011-12-21
      相关资源
      最近更新 更多