Java RPC服务器框架

4
我计划用Java编写一个RPC服务器。该服务器需要接受传入的RPC请求,可能是通过HTTP进行,并回答它们。这是相当基础的功能。不需要支持“长轮询”或“挂起”的RPC,因此线程/请求模型应该完全足够。
如果我用Python编写,我可能会使用像twisted这样的框架。在C中,类似于glibc。在每种情况下,框架提供了处理IO和调用处理IO的高级结构的一般“select loop”核心的实现,最终导致我的应用程序被调用以处理事件,例如接收RPC。
虽然我可能使用HTTP进行RPC,但请注意,这绝不是Web应用程序,因此Web框架不适用。由于我很久没有用Java编写过任何实质性内容,所以我不知道目前的技术水平或建议解决方案。可能有标准库的部分可以很容易地用于此。因此,我向StackOverflow提出了问题:有哪些框架适合这样的任务?
3个回答

4

Apache MINA 是一个设计非常出色的异步非阻塞网络框架。它提供面向字节的读写数据包访问。在此基础上,它还有一个过滤器系统,可以添加其他层,提供诸如基于行的文本解析、加密(通过 TLS)、压缩等功能。

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


这看起来很不错。虽然,我会暂时不将其标记为“最佳答案”,以防有更好的回答出现。;) - Nick Johnson
不过有一个问题:他们提供的HTTP示例实现了HTTP协议本身,而API似乎只包含代理HTTP的支持。你知道是否有用于处理HTTP请求的内置或广泛使用的MINA库吗? - Nick Johnson
@Arachnid AsyncWeb(http://mina.apache.org/asyncweb/)是建立在MINA之上的HTTP层。但是,如果您确实要通过HTTP请求提供此RPC协议,则最好编写一个Servlet并将其托管在任何Web应用程序容器中。 - Mark Renouf
更好的链接:http://docs.safehaus.org/display/ASYNCWEB/Home 另请参阅:https://grizzly.dev.java.net/ - Mark Renouf
再次感谢。如果可以的话,我会给你一个+2的评价。;) - Nick Johnson

3

您有多种选择:

  • 使用现有的套接字编程SDK自己开发解决方案。
  • Java RMI,远程方法调用框架。
  • Java CORBA绑定,不再被视为当前技术。
  • Java Web服务框架,相当复杂。可以看看Apache CXF和不同的J2EE产品。

然后您还可以使用基于HTTP传输的不同系统,如JSON/XML-RPC,在这些系统中需要一个Web服务器。即使您排除了它们。


为什么使用JSON或XML需要一个Web服务器? - Mark Renouf
我已经决定了大部分RPC的线路格式,所以我不是在寻找一个RPC库 - 只是一个通用的网络编程框架。 - Nick Johnson
@tweakt 你说得对。我特别是在考虑通过HTTP传输的JSON或XML。这就是为什么... - Pierre

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接