2009-10-08 7 views
2

J'utilise les acteurs distants de Scala, mais le temps d'aller-retour (même d'un message trivial) est de 80ms, sans doute parce que l'algorithme TCP/IP Nagle est désactivé (ou TCP_NODELAY), ou du moins c'est ce que quelqu'un avec une certaine expérience avec Java RMI m'informe.Comment contrôler le paramètre TCP_NODELAY pour l'acteur distant Scala?

Tout ce que je fais dans le client pour obtenir un lien vers l'acteur distant est

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

Est-il possible d'obtenir à la prise sous-jacente et invoquer java.net.Socket.setTcpNoDelay() sur elle?

Répondre

3

Si vous devez appeler setTcpNoDelay() sur le socket sous-jacent sans modifier le code source de Scala, il y a 2 façons de le faire.

  1. Mettre en oeuvre votre propre SocketImplFactory: cette solution suce parce que vous aurez besoin de mettre en œuvre votre propre SocketImpl qui est trivial et vous ne pouvez pas simplement envelopper le SocketImpl existant car il n'est pas une API publique. Tout ce que je peux dire ici c'est la faute à quiconque a conçu SocketImplFactory en premier lieu.

  2. Utilisez AOP

BTW, je pense que la meilleure façon de résoudre ce problème consiste à modifier le code de l'acteur distant Scala et soumettre le patch.