2

我正在使用 Scala 的远程参与者,但往返时间(即使是一条微不足道的消息)是 80 毫秒,可能是由于底层套接字没有禁用 TCP/IP Nagle 算法(也称为 TCP_NODELAY),或者至少有人这样做有一些 Java RMI 经验的人告诉我。

我在客户端中为获取到远程参与者的链接所做的一切就是

val server=select(Node("127.0.0.1",12111),'server)

有什么方法可以获取底层套接字并调用java.net.Socket.setTcpNoDelay()它吗?

4

1 回答 1

3

如果你需要在底层 Socket 上调用 setTcpNoDelay() 而不修改 Scala 源代码,有两种方法可以做到。

  1. 实现你自己的 SocketImplFactory:这个解决方案很糟糕,因为你需要实现你自己的 SocketImpl,这不是微不足道的,而且你不能仅仅包装现有的 SocketImpl,因为它不是公共 API。我在这里只能说首先要归咎于设计 SocketImplFactory 的人。

  2. 使用 AOP

顺便说一句,我认为解决此问题的最佳方法是修改 Scala 远程参与者代码并提交补丁。

于 2009-10-09T04:19:20.637 回答