Отправка запросов к однообъемному объекту, не поддерживающему потоки, в Tokio - PullRequest
0 голосов
/ 06 июля 2018

Я хочу создать обертку вокруг объекта из сторонней библиотеки, а затем отправлять запросы, исходящие из сокетов TCP, через Tokio. Есть ли идиоматический способ справиться с этим в Токио?


Концептуально интерфейс выглядит так:

impl MyObject {
    fn handle_requestA(&self, r: RequestA) -> ResponseA,
    fn handle_requestB(&self, r: RequestB) -> ResponseB,
    // ...
}

Несколько замечаний:

  1. объект не является потокобезопасным, поэтому запросы должны быть сериализованы
  2. Обработчики запросов могут занять много времени, поэтому запуск их в том же потоке, что и остальная часть цикла событий Tokio, вероятно, не очень хорошая идея

Я мог бы просто раскрутить обычный поток ОС и передать его через очередь, но в этом случае мне нужно было бы мультиплексировать запросы разных типов (а затем демультиплексировать ответы обратно в сокеты). Есть ли какая-нибудь существующая сантехника, которую я мог бы повторно использовать?

Целью растяжения является создание пула MyObject с и запросов балансировки нагрузки между ними.

...