【问题标题】:Porting python-twisted based code to scala: framework advice needed将基于 python-twisted 的代码移植到 scala:需要框架建议
【发布时间】: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


【解决方案1】:

Finagle 似乎与twisted 非常相似,或者至少意外地相似。 twitter.util.Future 看起来很像 twisted 的 Deferred。所以我暂时使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2011-05-25
    • 2011-12-17
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多