Java中的流数据:RMI vs Socket

时间:2012-11-13 17:29:10

标签: java sockets rmi

我有一台服务器需要在Observer模式中尽快将数据流式传输到多个客户端。

每秒至少需要向每个客户端发送200条消息,直到客户端与服务器断开连接,并且每条消息由8个基本类型的值组成。由于每条消息都需要在创建后立即发送,因此消息不能合并为一条大消息。服务器和客户端都驻留在同一个LAN上。

哪种技术更适合在这种情况下实现流媒体,RMI或套接字?

3 个答案:

答案 0 :(得分:3)

RMI的开销很大,因此不合适。最好创建一个简单的协议并使用套接字来发送数据。

根据可接受的延迟,您应配置套接字缓冲区大小并关闭Nagle算法。

答案 1 :(得分:2)

我不会为此使用RMI,RMI只是用于远程方法调用,即当客户端想要在服务器端执行方法(即某些业务逻辑)时。

套接字可以做到这一点,但您可能需要考虑针对此特定方案的JMS(Java消息传递服务)。 JMS支持称为Topic的东西,对于对该主题感兴趣的所有监听器本质上是广播。它通常也被优化为非常快。

您可以使用类似Apache ActiveMQ的内容来实现您的目标。您还有很多选项,例如持久性(如果队列关闭消息保留在队列中),消息过期(如果您希望消息在客户端不接收时过期),等等。

显然,您可以使用普通套接字实现所有这些,并自己处理所有事情,但JMS为您提供了所有这些。您可以发送文本或二进制数据,甚至是序列化对象(我个人不推荐后者)。

答案 2 :(得分:1)

RMI是请求/响应协议,而不是流协议。使用TCP。