套接字或RMI - 性能和可伸缩性

时间:2014-02-12 10:43:03

标签: java sockets network-programming rmi

我目前正在决定将用于新项目的通信方法/网络协议。 我能告诉你的关于这个项目的是: - 它是基于Android / java的,使用X量的Android设备 - 这些设备应该能够通过本地网络相互发送字符串。我们在这里谈论小字符串。小于100个字符。 - 发送的包裹/传输量可以变化“很多”。不幸的是,我不能说多少,但网络协议需要尽可能地扩展。

我研究了不同类型的可能解决方案,现在决定使用“套接字”或“RMI”

据我了解RMI:

  • 实现和维护(少量代码)
  • 比Java套接字更容易
  • 它比套接字“慢一点”,因为它是一个新的“层”构建在套接字之上
  • 可能存在一些可伸缩性问题(如果这是真的,它是多么“严重”?)因为它会创建大量新的套接字,导致异常。

显然系统需要尽可能顺畅地运行,但主要目标是使其可扩展,以便能够处理更多Android设备。

编辑:系统不是“点对点”的系统。所有的android设备都应该能够配置为服务器。

2 个答案:

答案 0 :(得分:0)

在我看来,没有任何问题是真正的问题。

RMI有一个预定义的协议,原始套接字没有。

如果使用原始套接字,则必须完成所有工作以定义客户端和服务器交换的消息和协议。

有很多好的现有协议(RMI,HTTP等),我想知道为什么你觉得有必要再发明一次。

通过HTTP进行通信的Android设备 - 告诉我为什么它不够快或不够灵活。 HTTP对于互联网来说已经足够了 - 为什么不是你和你的解决方案呢?

答案 1 :(得分:0)

我建议你在应用服务器中公开某种web服务(SOAP或REST)。例如,人们经常将他们的数据作为REST Web服务API暴露给移动设备,返回某种JSON格式,以便更容易在客户端设备中再次编组它。

通过这种方式,您可以在每个应用程序服务器中利用HTTP通信的底层实现;任何其他方式,你必须使用nio原始操作编写自己的工作线程池以实现性能......在真实的生产环境中不是一件容易的事情 - 也许是在学术环境中?