sockets - 如何控制Scala远程actor的TCP_NODELAY设置?

标签 sockets scala tcp actor

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

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

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

是否有某种方法可以获取底层套接字并对其调用java.net.Socket.setTcpNoDelay()

最佳答案

如果需要在不修改Scala源码的情况下在底层Socket上调用setTcpNoDelay(),有2种方法可以实现。

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

  2. 使用AOP

顺便说一句,我认为解决这个问题的最好方法是修改Scala远程Actor代码并提交补丁。

关于sockets - 如何控制Scala远程actor的TCP_NODELAY设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540369/

相关文章:

C++ TCP 套接字插件

c++ - CSocket 在发送时不阻塞

python - 使用 python 打开(并维护)远程连接

scala - 如何将Scala,Groovy和Java代码与Gradle结合使用?

java - 没有 Java 的 Android

C++:setsockopt() 可以被信号忽略吗?

python - 你如何使用带 stunnel 的 Python 套接字?

scala - 如何使用 Scalatest 在 Scala 中开发编译器插件

C# Tcp 通信线程池与异步调用

Java Socket 数据包读取重叠