【发布时间】:2011-05-15 11:30:54
【问题描述】:
我正在尝试将大量用 python 编写的代码移植到 scala 中,我正在寻找有关选择哪种框架组合的意见。
这个东西本质上是一个 RPC(基于自定义 protobuf + xmlrpc)/HTTP 服务器和客户端,它执行一些数据库维护和转换,但后来将 RPCs 发送到此重写范围之外的工作人员。
作为实现 RPC 堆栈的网络 IO/基础,我使用的是 netty。旧事物中的所有工作流程都基于 twisted 的 Deferred,为了替换它,我目前正在考虑直接使用 ChannelFuture,或者将其包装在 scalaz.Promise 或 akka.Future 中。
我想,问题的一部分是 - 它可以比手动处理回调更简单吗?我想,如果我选择这条路线,我以后可以通过添加一些包装器和使用延续来简化它,但也许我需要从一开始就使用不同的东西?
我尝试将工作流融入演员模型,但它似乎不适用于 stdlib 演员。
谢谢。
更新: Finagle 似乎非常接近于扭曲的模型,或者至少意外地相似。 twitter.util.Future 看起来很像 twisted 的 Deferred。所以我暂时使用它。
更新 2:我首先移植它的原因是静态类型和性能。
【问题讨论】:
-
你在 PyPy 上尝试过 Twisted 吗?
-
由于 Finagle 和 Twisted 都以类似方式处理异步 I/O,您希望获得什么好处?是风格还是性能,如果是风格,你可以看看使用协程和greenlets的gevent,然后再twisted和tornado有inlineCallbacks和tornado.gen,这使得回调更容易。
标签: python scala twisted akka scalaz