rust - tokio TcpStream 上的并发读/写

标签 rust rust-tokio

我有一个场景,线程 1 写入套接字,线程 2 从套接字读取。我过去曾通过 split() 完成过此操作它将消耗 TcpStream 并返回 ReadHalf/WriteHalf,然后可以将其整齐地传递给线程。我在 1.39.0(tokio - 0.2.0-alpha.6) 上遇到问题。

  1. 现在已更改为 pub fn split(&mut self) -> (ReadHalf, WriteHalf) 。这不允许将 ReadHalf/WriteHalf(其生命周期与流相关)传递给单独的线程,而不会遇到困惑的生命周期问题

  2. 简单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);

这结束于 ReadHalfWriteHalf ,两者都实现了 SendSync

关于rust - tokio TcpStream 上的并发读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886314/

相关文章:

rust - 由于``Tikio运行时当前未运行''而对 "thread ' main感到 panic

rust - 我可以将 `impl Future` 存储为具体类型吗?

rust - MQTT 与 tokio 的连接

closures - 如何创建和使用回调函数列表?

rust - fatal error LNK1181 : cannot open input file 'gtk-3.lib'

rust - 如何在另一个Tokio运行时中创建Tokio运行时而没有出现 "Cannot start a runtime from within a runtime"错误?

async-await - 具有特征的 tokio-async-await

rust - 在 IntoFuture 中包装枚举变体?

rust - 如何实现通用函数的专用版本?

rust - Rust 语法 `if let [.., last] = self ...` 是什么意思?