Я хочу создать обертку вокруг объекта из сторонней библиотеки, а затем отправлять запросы, исходящие из сокетов TCP, через Tokio. Есть ли идиоматический способ справиться с этим в Токио?
Концептуально интерфейс выглядит так:
impl MyObject {
fn handle_requestA(&self, r: RequestA) -> ResponseA,
fn handle_requestB(&self, r: RequestB) -> ResponseB,
// ...
}
Несколько замечаний:
- объект не является потокобезопасным, поэтому запросы должны быть сериализованы
- Обработчики запросов могут занять много времени, поэтому запуск их в том же потоке, что и остальная часть цикла событий Tokio, вероятно, не очень хорошая идея
Я мог бы просто раскрутить обычный поток ОС и передать его через очередь, но в этом случае мне нужно было бы мультиплексировать запросы разных типов (а затем демультиплексировать ответы обратно в сокеты). Есть ли какая-нибудь существующая сантехника, которую я мог бы повторно использовать?
Целью растяжения является создание пула MyObject
с и запросов балансировки нагрузки между ними.