我有一个场景,线程 1 写入套接字,线程 2 从套接字读取。我过去曾通过 split()
完成过此操作它将消耗 TcpStream 并返回 ReadHalf/WriteHalf,然后可以将其整齐地传递给线程。我在 1.39.0(tokio - 0.2.0-alpha.6) 上遇到问题。
现在已更改为
pub fn split(&mut self) -> (ReadHalf, WriteHalf)
。这不允许将 ReadHalf/WriteHalf(其生命周期与流相关)传递给单独的线程,而不会遇到困惑的生命周期问题简单
read()/write()
变体取&mut self
,这使得无法进行并发读/写。
有趣的是,UdpSocket仍然采用旧的方式( pub fn split(self) -> (UdpSocketRecvHalf, UdpSocketSendHalf)
)
还发现了这个相关的( Unresolved )线程:https://github.com/tokio-rs/tokio/issues/1108 。不确定 TcpStream 是否还能实现这一点。
感谢此处的任何建议。
谢谢。
最佳答案
您可以使用tokio::io::split
let (read, write) = tokio::io::split(socket);
关于rust - tokio TcpStream 上的并发读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886314/