用于客户端/服务器通信的Java标准

时间:2011-01-19 15:18:23

标签: java networking rmi

什么是客户端/服务器或P2P通信的“官方”Java API? Java RMI?其他一些网络API ??

官方网络API 两者 SE和EE的标准吗?

我确定答案是特定于上下文的,所以让我们看几个例子:

  1. 您在2台计算机上安装了2个swing客户端并连接到同一网络(或Internet),并且您希望其中任何一个发送另一个原语,例如整数4或某些POJO,如“小工具“对象
  2. 与上面的#1相同,但在Swing客户端和完全兼容的Java EE后端之间(实现托管bean,app服务器,整个九码)
  3. 我没有特定的应用程序,我只是想知道Java世界中客户端 - 客户端和客户端 - 服务器通信的“规范”是什么。

5 个答案:

答案 0 :(得分:3)

如果被Java绑定不是问题,那么当涉及到客户端和服务器解决方案“交换”数据时,RMI是一个非常抽象的解决方案(特别是当数据是Java类时,可能很难/太多努力表示为文本数据)。只需确保您的对象实现Serializable,几乎任何东西都可以通过网络传输。

如果这不符合您的账单并且您想要删除原始网络内容,那么客户端 - 服务器套接字框架Netty是一个不错的选择。

答案 1 :(得分:1)

在J2SE中没有最官方的网络API这样的东西,所有J2SE API都是正式的,因为Sun(现在是Oracle)支持它们。 也就是说,您应该根据以下标准选择API:

  • 您(或您的团队)是否知道如何使用特定的API;
  • 此API使用的简单/复杂程度;
  • 您的目标是什么?对于性能敏感的应用程序,您可能被迫使用二进制协议。对于其他情况,您可以使用基于文本的协议。

例如,在两个客户端之间,简单的基于文本的协议就足以传递POJO,例如使用Apache MINA或Google协议缓冲区。
这也适用于客户端和服务器之间。


回应Zac的评论问题:

  1. 二进制协议的性能提升来自于您不需要将所有内容转换为文本形式和返回的事实 - 您只需通过最小的更改即可传递应用程序内存的二进制表示,例如,在BSD套接字API的情况下,转换从主机字节顺序到网络字节顺序。不幸的是,我不知道有关RMI / Java序列化如何处理对象的详细信息,但我确信,它仍然比以可读形式传递所有数据快得多;
  2. 是的,MINA和协议缓冲区都有Java API。它们只是Java SE捆绑包的一部分,您必须单独下载它们。顺便说一下,MINA可以使用二进制和可读序列化,具体取决于您的使用方式。
  3. 你应该以某种方式定义'好'的概念,例如,回答我上面提到的问题。如果要通过网络使用对象,请使用RMI。如果不这样做,Netty或MINA就足够了,无论你发现什么都比较容易掌握。

答案 2 :(得分:0)

对于P2P,Sun在某一点上非常努力地推动了JXTA

我不敢将RMI用于P2P通信。

答案 3 :(得分:0)

rmi几乎是标准的java to java协议。它内置并且使用起来非常简单。大多数j2ee后端也使用rmi进行通信,尽管这不是唯一的可能性。

答案 4 :(得分:-1)

J2SE最常见的可能是RMI或原始套接字。

J2EE使用每个人(服务器和客户端)订阅的消息传递总线与rmi样式解决方案完全不同(尽管在最低级别,实现可能仍然依赖于RMI)。它有助于自动化冗余和故障转移。如果您需要此功能,我相信它也可以在SE中使用。

我现在已经有一段时间没用过J2EE了,所以这可能已经改变了,但我对此表示怀疑。消息传递系统是J2EE的核心组件。