在java中组合UDP和RPC的最简单,最有效的方法是什么?

时间:2011-08-27 16:08:06

标签: java networking

我正在考虑在我的一个项目中使用java(出于与网络无关的原因)。目前我正在使用C ++和基于UDP构建的自定义协议。我的问题在于,虽然增加的效率对于发送大量实时数据很有用,但我宁愿在RPC中使用一些纯粹的“逻辑操作”,例如登录。但是C ++中的RPC很难做到,因为标准C ++本身没有序列化的概念。

在另一个答案中,我发现了Java的RMI,它似乎与RPC类似,但我找不到它的效率/响应能力,也不知道它是否可以插入我现有的UDP套接字,因为我没有想在我的服务器程序上打开两个端口。

或者,因为我认为Java有序列化,所以我可以自己实现RPC,这取决于在java中对任意对象流进行反序列化是多么简单。尽管如此,如果这需要我花几天时间学习java的内在函数,那对我来说这不是一个选择。

3 个答案:

答案 0 :(得分:2)

如果您对RPC感兴趣,总会有XML-RPCJSON-RPC,它们都有免费/开源的C ++实现。不幸的是,我的大部分开发都是用Java编写的,所以我不能说它们的可用性或有效性,但它可能是值得研究的,因为它听起来你已经在C ++中做了一些工作并且对它感到满意。它们也有Java实现,所以如果你想沿着那条路走下去,你甚至可以用XML-RPC或JSON-RPC支持Java和C ++应用程序。

唯一的缺点是看起来大多数都使用HTTP连接。您想要做的一件事是重用现有连接。现在,我没有看过所有的实现,但我看到的两个可能不符合这个要求。最糟糕的情况是,也许你可以得到一些想法。最好的情况是,如果那里可能有另外一个实现你需要的东西,你现在有一个起点找到它。

答案 1 :(得分:1)

使用RPC作为抽象并不排除使用UDP作为传输层:RMI是一种RPC抽象,通常在底层使用TCP(上次我看)。

我建议只编写一个Java层来讨论你的UDP协议:你可以使用许多库中的任何一个来完成它,你不必丢弃所有现有的工作。如果要围绕协议包装RPC层,没有理由不这样做:创建一个login方法,该方法发送登录UDP数据包并接收相应的响应并将其返回。

答案 2 :(得分:0)

如果这是一个远程严肃的项目,你应该看看Netty

它是开发网络系统的绝佳库,具有大量经过验证的生产用途,非常适合TCP或UDP客户端 - 服务器通信等。除非你真的需要,否则我不会重新发明这个轮子: - )

作为奖励,他们也有一些很好的例子和文档。