我想围绕来自第三方库的对象创建一个包装器,然后通过 Tokio 将源自 TCP 套接字的请求分派给它。在 Tokio 有没有一种惯用的方法来处理这个问题?
从概念上讲,界面如下所示:
impl MyObject {
fn handle_requestA(&self, r: RequestA) -> ResponseA,
fn handle_requestB(&self, r: RequestB) -> ResponseB,
// ...
}
有几点需要注意:
- 该对象不是线程安全的,因此需要对请求进行序列化
- 请求处理程序可能需要很长时间,因此在与 Tokio 事件循环的其余部分相同的线程上运行它们可能不是一个好主意
我可以启动一个常规的操作系统线程并通过队列提供它,但在这种情况下,我需要将不同类型的请求多路复用到它上面(然后将响应多路分解回套接字)。是否有一些我可以重复使用的现有管道?
一个延伸目标是在它们之间有一个MyObject
s 池和负载平衡请求。