Я пытаюсь перенести значительный объем кода, написанного на python, с twisted, на scala, и я ищу мнения о том, какую комбинацию фреймворков выбрать.
По сути, это RPC (custom protobuf-based + xmlrpc) / HTTP-сервер и клиент, который выполняет некоторые операции по хранению и преобразованию базы данных, но позже отправляет rpcs рабочим, которые выходят за рамки этой перезаписи.
В качестве сетевой базы ввода-вывода для реализации стека RPC я использую netty. Все рабочие процессы в старой штуке были основаны на Deferred twisted, и для его замены я сейчас рассматриваю либо ChannelFuture напрямую, либо оборачиваю его либо в scalaz.Promise, либо в akka.Future.
Я думаю, это одна часть вопроса есть - можно ли это сделать проще, чем вручную работать с обратными вызовами? Думаю, если я выберу этот маршрут, я смогу упростить его позже, добавив несколько оболочек и используя продолжения, но, может быть, мне нужно использовать что-то отличное от того, что было в начале?
Я пытался подогнать рабочий процесс внутри модели акторов, но похоже, что это не работает с акторами stdlib.
Спасибо.
Обновление: Finagle Похоже, что он смоделирован или, по крайней мере, случайно похож на скрученный. twitter.util.Future очень похож на Deferred от twisted. Так что я использую его на данный момент.
Обновление 2: Причины, по которым я перенес его в первую очередь, - это статическая типизация и производительность.