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

Scala ソース コードを変更せずに、基になる Socket で setTcpNoDelay() を呼び出す必要がある場合は、2 つの方法があります。

  1. 独自の SocketImplFactory を実装する: このソリューションは、自明ではない独自の SocketImpl を実装する必要があり、パブリック API ではないため、既存の SocketImpl をラップすることはできないため、最悪です。ここで言えることは、最初に SocketImplFactory を設計した人に責任があるということだけです。

  2. AOP を使用する

ところで、この問題を解決する最善の方法は、Scala リモート アクター コードを変更してパッチを送信することだと思います。

于 2009-10-09T04:19:20.637 に答える