我如何使用TcpStream通过异步方式在2个线程之间分割?

问题描述 投票:0回答:1

我正在尝试在不同线程中使用tcp流的读取和写入。这是我目前拥有的:

use tokio::prelude::*;
use tokio::net::TcpStream;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut stream = TcpStream::connect("localhost:8080").await?;
    let (mut read, mut write) = stream.split();

    tokio::spawn(async move {
        loop {
            let mut buf = [0u8; 32];
            read.read(&mut buf).await.unwrap();
            println!("{}", std::str::from_utf8(&buf));
        }
    });

    Ok(())
}

我将使用另一个线程进行写入。我的问题是我得到了一个错误,即“流”在仍然借用时被丢弃了。

rust rust-tokio
1个回答
0
投票

这是由于Tokio::split的方法签名所致,正如您所看到的,它需要Tokio::split,因此由于&mut self的限制,它的一部分不能在tokio::spawn将来的参数中使用。因此,这正是错误所言。

您正在搜索的是'statictokio::io::split

Playground
© www.soinside.com 2019 - 2024. All rights reserved.