J'essaie de porter une quantité significative de code écrit en python avec twisted to scala, et je cherche des opinions sur la combinaison de framework à choisir. Il s'agit essentiellement d'un serveur et d'un client RPC (custom protobuf-based + xmlrpc)/HTTP, qui effectue un certain nombre de bases de données et de transformations, mais qui envoie ensuite des rpcs aux travailleurs hors de portée de cette réécriture.Portage de code basé sur python-twisted à scala: conseil de base nécessaire
En tant qu'OE/base de réseau pour la mise en œuvre de la pile RPC, j'utilise netty. Tous les workflows de l'ancienne version étaient basés sur le mode différé de Twisted, et pour le remplacer, je considère actuellement soit ChannelFuture directement, soit l'intégrant dans scalaz.Promise ou akka.Future. Je suppose, une partie de la question est - peut-il être fait plus simple que de travailler manuellement avec des rappels? Je suppose, si je choisis cette route, je peux la simplifier plus tard en ajoutant des wrappers et en utilisant des continuations, mais peut-être que je dois utiliser quelque chose de différent depuis le début?
J'ai essayé d'adapter le flux de travail à l'intérieur du modèle d'acteur, mais cela ne semble pas fonctionner avec les acteurs de stdlib.
Merci.
Mise à jour: Finagle semble être modélisé de près, ou au moins accidentellement similaire, à tordu. twitter.util.Future ressemble beaucoup à Deferred. Donc je l'utilise pour le moment.
Mise à jour 2: Les raisons pour lesquelles je l'ai porté en premier lieu sont le typage statique et les performances.
Avez-vous essayé Twisted sur PyPy? –
Quels avantages espérez-vous tirer du fait que Finagle et Twisted traitent les E/S asynchrones de la même façon? C'est le style ou la performance, si c'est le style, vous pouvez regarder gevent qui utilise coroutines et greenlets, mais encore une fois tordu et tornado ont inlineCallbacks et tornado.gen qui facilite les rappels. – RubyGladiator