【发布时间】:2021-03-03 15:04:16
【问题描述】:
我正在将我的一些旧代码转换为期货异步/等待风格,但遇到了问题。
我正在使用 tokio_util crate,因为我正在处理一个带有来自这个 crate 的 Encoder 和 Decoder 特征的框架协议。
对于Decoder,我需要查看传递的bytes::BytesMut 结构的前两个字节,因为这些字节包含帧的长度。但是 BytesMut 结构并不容易做到这一点。我的功能是:
impl Decoder for MyCodec {
type Item = ServerMessage;
type Error = io::Error;
fn decode(&mut self, buf: &mut BytesMut) -> io::Result<Option<ServerMessage>> {
if buf.len() <= 2 {
return Ok(None);
};
如果至少有 2 个字节在 buf 中,则下一步将发生,并且应该以大端格式读取这些字节以继续解码。问题是我看不到如何使用 BytesMut 结构来做到这一点。
【问题讨论】:
-
我没有看到异步链接
-
链接是我正在使用使用异步读写的 tokio crate,并且在 tokio_util 中定义了 Decoder trait 签名(使用 bytes crate)。
-
但你的问题是关于 BytesMut,tokio 是题外话。
-
不,是 tokio 迫使我使用 BytesMut,所以它参与其中。
标签: rust rust-tokio