【问题标题】:Framework for Java RPC server [closed]Java RPC 服务器框架 [关闭]
【发布时间】:2010-10-18 12:58:52
【问题描述】:

我正计划用 Java 编写一个 RPC 服务器。服务器需要接受传入的 RPC(可能通过 HTTP)并回答它们。相当基本的东西。不需要支持“长轮询”或“挂起”RPC,因此每个请求的线程模型应该是完全足够的。

如果我是用 Python 编写的,我可能会使用像 twisted 这样的框架。在 C 语言中,类似 glibc。在每种情况下,框架都提供了处理 IO 的通用“选择循环”核心的实现,并调用处理它的更高级别的构造,最终导致我的应用程序被调用以处理诸如接收 RPC 之类的事件。

不过,我已经很久没有用 Java 编写任何实质性的东西了,所以我不知道这类事情的最新技术或建议的解决方案是什么。甚至可能有部分标准库我可以很容易地用来做这件事。因此我向 StackOverflow 提出了问题:有哪些框架适合这样的任务?

请注意,虽然我可能将 HTTP 用于 RPC,但这绝不是 Web 应用程序 - 因此,Web 框架并不合适。

【问题讨论】:

    标签: java http network-programming rpc


    【解决方案1】:

    Apache MINA 是一个设计非常好的异步非阻塞网络框架。它提供面向字节的访问来读取和写入数据包数据。在此基础上构建了一个过滤系统,可以在其中添加额外的层,提供面向行的文本解析、加密(通过 TLS)、压缩等功能。

    PS:强烈推荐 2.0 版本系列,尽管它仍处于“里程碑”形式,但它已被证明非常稳定并且接近最终版本。

    【讨论】:

    • 这看起来很棒。不过,如果有人想出更好的东西,我会推迟将其标记为“答案”。 ;)
    • 不过有一个问题:他们提供的 HTTP 示例实现了 HTTP 协议本身,并且 API 似乎只包含对代理 HTTP 的支持。你知道是否有内置的或常用的 MINA 库来处理 HTTP 请求吗?
    • @Arachnid AsyncWeb (mina.apache.org/asyncweb) 是一个构建在 MINA 之上的 HTTP 层。尽管如果您确实通过 HTTP 请求为该 RPC 协议提供服务,那么您最好编写一个 servlet 并将其托管在任何 Web 应用容器中。
    • 再次感谢。如果可以的话,我会给你+2。 ;)
    【解决方案2】:

    您有多项选择:

    • 使用现有的用于套接字编程的 SDK 推出您自己的解决方案。
    • Java RMI,远程方法调用框架。
    • Java CORBA 绑定不再被认为是最新的。
    • Java Web Service 框架相当复杂。看看 Apache CXF 和不同的 J2EE 产品。

    然后你有不同的系统在 HTTP 传输之上运行,比如 JSON/XML-RPC,你需要一个 Web 服务器。即使您将它们排除在外。

    【讨论】:

    • 为什么使用 JSON 或 XML 需要 Web 服务器?
    • 我已经(大部分)为我决定了 RPC 的有线格式,所以我并不是在寻找 RPC 库本身 - 只是一个通用的网络编程框架。
    • @tweakt 你是对的。我特别想到了基于 HTTP 的 JSON 或基于 HTTP 的 XML。这就是为什么...
    【解决方案3】:

    您可以考虑使用像Jetty 这样简单的东西,jetty 的内部结构非常稳定,可以处理相当多的连接。如果您实现了特定于码头的处理程序接口,您也可以不使用所有 servlet 和 JSP 支持库,使其成为一个非常小的可嵌入应用程序服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2012-10-06
      • 2015-09-26
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多