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