Как управлять настройкой TCP_NODELAY для удаленного актера Scala? - PullRequest
2 голосов
/ 09 октября 2009

Я использую удаленные акторы Scala, но время кругового обхода (даже тривиального сообщения) составляет 80 мс, предположительно из-за того, что в базовом сокете не отключен алгоритм TCP / IP Nagle (также известный как TCP_NODELAY), или по крайней мере это то, что мне сообщает кто-то с некоторым опытом работы с Java RMI.

Все, что я делаю в клиенте, чтобы получить ссылку на удаленного субъекта, это

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

Есть ли какой-нибудь способ добраться до основного сокета и вызвать на нем java.net.Socket.setTcpNoDelay()?

1 Ответ

3 голосов
/ 09 октября 2009

Если вам нужно вызвать setTcpNoDelay () на базовом сокете без изменения исходного кода Scala, есть 2 способа сделать это.

  1. Реализуйте свой собственный SocketImplFactory: это решение - отстой, потому что вам потребуется реализовать собственный SocketImpl, который не является тривиальным, и вы не можете просто обернуть существующий SocketImpl, потому что он не является публичным API. Все, что я могу здесь сказать, - это винить во всем, кто спроектировал SocketImplFactory.

  2. Использовать AOP

Кстати, я думаю, что лучший способ решить эту проблему - это изменить код удаленного актера Scala и отправить патч.

...