作为一种熟悉Rust& amp;网络一般我开始编写一个非常基本的telnet聊天服务器。一切似乎进展顺利,但现在我最终得到了一些不安全的代码,我想知道是否有更好的方法来做事。
我生成一个任务来监听类似于此的连接:Example TCP server written in Rust一旦用户连接并得到一个TcpStream,我将它放在一个Connection结构中。 Connection结构使用通道与两个任务进行通信 - 一个用于从其TcpStream读取,另一个用于写入。读取任务在TcpStream的read()方法上阻塞,并将任何输入发送回Connection结构。写入程序阻塞Port的recv()方法,并将收到的任何内容写入TcpStream。通过这种方式,程序的主循环可以简单地维护连接结构的向量以检查用户输入并随意写入它们。问题是,通过这种实现,TcpStream必须由read& amp;写入任务,并调用可变的write()方法,而可变的read()方法在其他任务中仍然阻塞。在0.8我用Rc和unsafe_borrow_mut做了这个,但是如果可以的话,我想以更好的方式做到这一点 - 在这种情况下Rust的类型系统的反对意见可能是完全有效的,据我所知。任何有关整体设计的评论也会受到欢迎。感谢。
答案 0 :(得分:2)
目前没有惯用的方法,因为Rust的IO API目前不支持并行读取或写入。 有关详细信息,请参阅此问题:https://github.com/mozilla/rust/issues/11165 将重新设计TcpStream API以允许以一种或另一种方式(请参阅问题),然后提供“惯用方式”来执行此操作。