我正在使用Scala的远程演员,但是往返时间(即使是一个微不足道的消息)也是80ms,可能是由于底层套接字没有禁用TCP / IP Nagle算法(也称为TCP_NODELAY),或者至少具有一定Java RMI经验的人告诉我。
我在客户端做的所有事情都是为了获得远程演员的链接
val server=select(Node("127.0.0.1",12111),'server)
有没有办法获得底层套接字并在其上调用java.net.Socket.setTcpNoDelay()
?
答案 0 :(得分:3)
如果你需要在底层Socket上调用setTcpNoDelay()而不修改Scala源代码,有两种方法可以做到。
实现自己的SocketImplFactory:这个解决方案很糟糕,因为你需要实现自己的SocketImpl,这不是简单的,你不能只包装现有的SocketImpl,因为它不是一个公共API。我在这里所说的一切都归咎于首先设计SocketImplFactory的人。
使用AOP
BTW,我认为解决此问题的最佳方法是修改Scala远程actor代码并提交补丁。