【发布时间】:2021-10-24 04:16:32
【问题描述】:
所以我试图更好地理解一个简单的 TCP 服务器是如何在 rust 中工作的。假设我有下面的简单 TCP 服务器。
use std::io::Write;
use std::net::TcpListener;
use std::thread;
fn main() {
let listener = TcpListener::bind("127.0.0.1:9123").unwrap();
println!("listening started, ready to accept");
for stream in listener.incoming() {
thread::spawn(|| {
let mut stream = stream.unwrap();
stream.write(b"Hello World\r\n").unwrap();
});
}
}
服务器通过接受来自给定套接字的传入连接来工作。在产生需要线程之后,您重新定义流变量,以便您可以将其更改为您想要的任何内容。然后,您可以随时写入该变量。
然后假设有一个看起来像这样的客户端:
use std::net::TcpStream;
//and any other imports that you need
fn main() {
let stream = TcpStream::connect("127.0.0.1:9123").unwrap();
//Then assume that you can read and write things back to the server
我不明白每次建立连接时线程如何处理服务器。是否像设置多个服务器一样?您如何处理进出服务器的数据包?你如何处理掉线的连接?
【问题讨论】:
-
多线程解决方案、轮询解决方案和异步解决方案,可以使用这两种解决方案来实现。
-
所有这些有什么区别?