Rust 等待读取时处理对TcpStream的写入的惯用方法

Rust 等待读取时处理对TcpStream的写入的惯用方法,rust,Rust,为了熟悉Rust&networking,我开始编写一个非常基本的telnet聊天服务器。一切似乎都进行得很顺利,但现在我遇到了不安全的代码块,我想知道是否有更好的方法来做事情 我生成了一个任务来监听与此类似的连接:一旦用户连接,我得到一个TcpStream,我就把它放在一个连接结构中。连接结构使用通道与两个任务通信——一个用于从其TcpStream读取,另一个用于写入。读取任务阻塞TcpStream的read()方法,并将任何输入发送回连接结构。写入程序阻塞端口的recv()方法,并将接收到的任

为了熟悉Rust&networking,我开始编写一个非常基本的telnet聊天服务器。一切似乎都进行得很顺利,但现在我遇到了不安全的代码块,我想知道是否有更好的方法来做事情


我生成了一个任务来监听与此类似的连接:一旦用户连接,我得到一个TcpStream,我就把它放在一个连接结构中。连接结构使用通道与两个任务通信——一个用于从其TcpStream读取,另一个用于写入。读取任务阻塞TcpStream的read()方法,并将任何输入发送回连接结构。写入程序阻塞端口的recv()方法,并将接收到的任何内容写入TcpStream。这样,程序的主循环就可以简单地维护一个连接结构向量,以检查用户输入并随意写入。问题是,在这个实现中,TcpStream必须由读写任务和调用的可变write()方法共享,而可变read()方法仍在另一个任务中阻塞。在0.8中,我使用了一个Rc和不安全的借用器,但是如果可以的话,我想用一种更好的方式,在这种情况下,Rust类型系统的反对意见可能是完全有效的,据我所知。对整体设计的任何意见也将受到欢迎。谢谢。

由于Rust的IO API目前不支持并行读写,因此目前没有惯用的方法来实现这一点。 有关更多信息,请参阅本期:
TcpStream API将进行重新设计,以允许以一种或另一种方式进行此类操作(请参阅问题),然后将提供一种“惯用方式”来完成此操作。

目前,您可以在master上克隆TcpStream并同时执行读写操作