2011-05-15 22 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

相關問題