gpt4 book ai didi

rust - 为什么在背靠背的 println 和 print 语句之间有停顿?

转载 作者:行者123 更新时间:2023-11-29 08:13:45 25 4
gpt4 key购买 nike

我正在使用标准库 net 模块编写一个简单的 HTTP 请求:

use std::io::prelude::*;
use std::net;

fn main() -> std::io::Result<()> {
let request =
b"GET / HTTP/1.1
Host: localhost:8080

";

let mut response = String::new();

print!("Connecting...");
let mut stream = net::TcpStream::connect("127.0.0.1:8080")
.expect("Cannot connect to server");
println!("Connected!");

print!("Writing...");
stream.write(request)
.expect("Error writing");
println!("Written!");

print!("Reading...");
stream.read_to_string(&mut response)
.expect("Error reading");
println!("Read!");

println!("\nResponse:\n{}", response);
Ok(())
}

我有一个简单的 Expresslocalhost:8080 上本地运行的网络服务器。

const express = require('express')
const app = express()
const port = 8080

app.get('/', (req, res) => {
console.time('/')
res.send('ok')
console.timeEnd('/')
})

app.listen(port, () => console.log(`Server on ${port}`))

当我运行程序时,打印 Written!Reading... 之间有一两秒的停顿。为什么在似乎没有任何东西可以暂停执行时会出现暂停?

服务器输出:

/: 5.168ms

Rust 输出:

Connecting...Connected!
Writing...Written! // PAUSES HERE AT EOL!
Reading...Read!

Response:
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 2
ETag: W/"2-eoX0dku9ba8cNUXvu/DyeabcC+s"
Date: Thu, 06 Dec 2018 22:32:47 GMT
Connection: keep-alive

ok

最佳答案

stdout 通常是行缓冲的,这意味着它会将您写入的任何内容存储在缓冲区中,直到它看到换行符。所以在 println!("Read!"); 打印换行符之前你什么都看不到。

如果你想显示之前的内容你需要flush the buffer .

use std::io;  // for io::stdout

...

print!("Reading...");
io::stdout().flush()?;

关于rust - 为什么在背靠背的 println 和 print 语句之间有停顿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53660817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com