2

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

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

这种情况下哪种技术更适合实现流式传输,RMI还是socket?

4

3 回答 3

3

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

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

于 2012-11-13T17:34:17.807 回答
2

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

套接字适用于此,但您可能需要考虑 JMS(Java 消息传递服务)用于此特定场景。JMS 支持称为主题的东西,它本质上是向所有对该主题感兴趣的听众广播。它通常也被优化为非常快。

您可以使用Apache ActiveMQ 之类的东西来实现您想要的。您还有很多选项,例如持久性(如果队列出现故障,消息仍保留在队列中)、消息过期(如果您希望消息在客户端不接收的情况下过期)等。

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

于 2012-11-13T17:41:26.080 回答
1

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

于 2012-11-14T03:40:39.200 回答