【发布时间】:2014-02-05 02:58:52
【问题描述】:
作为熟悉 Rust 和一般网络的一种方式,我开始编写一个非常基本的 telnet 聊天服务器。一切似乎都很顺利,但现在我得到了不安全的代码块,我想知道是否有更好的方法来做事。
我生成一个任务来侦听与此类似的连接:Example TCP server written in Rust 一旦用户连接并获得 TcpStream,我将其放入 Connection 结构中。 Connection 结构使用通道与两个任务进行通信——一个用于从其 TcpStream 中读取,另一个用于写入。读取任务阻塞 TcpStream 的 read() 方法并将任何输入发送回 Connection 结构。 writer 阻塞 Port 的 recv() 方法,并将接收到的任何内容写入 TcpStream。这样,程序的主循环就可以简单地维护一个 Connection 结构体的向量来检查用户输入并随意写入。问题是,在这个实现中,TcpStream 必须由读写任务共享,并且调用可变的 write() 方法,而可变的 read() 方法仍在其他任务中阻塞。在 0.8 中,我使用 Rc 和 unsafe_borrow_mut 来做到这一点,但如果可以的话,我想以更好的方式来做——据我所知,在这种情况下,Rust 类型系统的反对意见可能是完全有效的。任何关于整体设计的 cmets 也将受到欢迎。谢谢。
【问题讨论】:
-
目前你可以在master上克隆TcpStream并同时进行读写
标签: rust