2011-05-15 19 views
7

我试图移植大量用python编写的代码,并将其转换为scala,我正在寻找关于选择什么框架组合的意见。将基于python-twisted的代码移植到scala中:需要框架建议

这个东西本质上是一个RPC(基于定制protobuf的+ xmlrpc)/ HTTP服务器和客户端,它执行一些数据库保存和转换,但后来将rpcs发送给超出此重写范围的工作人员。

作为实现RPC堆栈的网络IO /基础,我使用的是netty。老东西中的所有工作流都基于Twisted的Deferred,并将其替换,我目前正在考虑直接使用ChannelFuture,或者将其包装在scalaz.Promise或akka.Future中。

我想,问题的一部分是 - 它可以做到比手动使用回调更简单吗?我想,如果我选择这条路线,稍后可以通过添加一些包装并使用延续来简化它,但也许我需要使用与开始不同的东西?

我试图在演员模型中适合工作流,但它似乎不适用于stdlib actors。

谢谢。

更新: Finagle似乎与扭曲后紧密相关,或者至少意外相似。 twitter.util.Future看起来很像扭曲的延迟。所以我现在使用它。

更新2:我首先移植它的原因是静态类型和性能。

+0

你试过在PyPy上扭曲吗? – 2012-08-04 22:04:45

+0

Finagle和Twisted都同样处理异步I/O,您希望获得什么好处?风格或性能,如果是风格,你可以看看使用协程和greenlet的gevent,但是再次扭曲和龙卷风有inlineCallbacks和tornado.gen,这使得回调更容易。 – RubyGladiator 2013-01-01 06:42:06

回答

2

Finagle似乎是在扭曲之后或者至少意外相似的情况下建模的。 twitter.util.Future看起来很像扭曲的延迟。所以我现在使用它。

1

看看这个link

这是一篇关于Scala和Python + Twisted之间性能比较的博客文章。他的代码(或他的建议)可能对你有用。

+1

虽然博客文章看起来非常过时。 – 2012-08-04 22:03:03

+0

@ErikAllik我明白你的观点。但是我认为这个博客中的相关内容是代码。通过使用它,他可以很容易地用python和scala的新版本进行快速测试。 – 2012-08-07 12:24:38

相关问题