Rust + Apache Flight:如何绕过 &self 上定义的库特征方法

Rust + Apache Flight: how to get around a library trait method defined on &self

提问人:jwimberley 提问时间:5/17/2023 更新时间:5/17/2023 访问量:56

问:

Apache Arrow Flight 协议的 Rust 实现定义了一个具有静态生存期的特征FlightService

pub trait FlightService: Send + Sync + 'static {
...

以及一个不可变的方法:handshake

    // Required methods
    fn handshake<'life0, 'async_trait>(
        &'life0 self,
        request: Request<Streaming<HandshakeRequest>>
    ) ...

这似乎让我陷入了相当大的束缚——握手方法必须对用户进行身份验证并使用持有者令牌进行响应,并且想要跟踪分配的令牌似乎很自然,例如,使用标头中的令牌对其他请求进行身份验证,并查找令牌的创建时间以查看它是否已过期。但是,由于握手方法处于开启状态,我无法在 FlightService 特征的实现中放置可变数据结构。此外,由于该特征具有静态生命周期,我似乎无法声明我的实现具有绑定到对其他令牌存储对象的可变引用的生命周期——尽管我对 Rust 很陌生,可能会误解生命周期限制。&self

因此,我似乎处于岩石和坚硬的地方之间,无法进行任何明确的握手操作,从而在有效令牌上显式生成和存储会话信息。库一定有某种方式希望这种握手方法有用——我怎样才能在其中改变一些范围更广的东西?或者我是否打算被迫通过稍后可以验证的用户/时间戳的一些加密哈希来制作令牌?

Rust 生命周期 apache-arrow-flight

评论

2赞 0xMB 5/17/2023
将您的状态包装在 (tokio.rs/tokio/tutorial/shared-state#strategies) 中。Arc<Mutex<MyState>>

答: 暂无答案