実装
[package]
name = "testing"
version = "0.1.0"
authors = ["TakesxiSximada <[email protected]>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
futures = "0.3"
[dependencies.async-std]
version = "1.6"
features = ["attributes"]use async_std::prelude::*;
use async_std::net::TcpListener;
use async_std::net::TcpStream;
use futures::stream::StreamExt;
async fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];
stream.read(&mut buffer).await.unwrap();
let response = "HTTP/1.1 200 OK\r\n\r\naaaaaa\r\n\r\n";
stream.write(response.as_bytes()).await.unwrap();
stream.flush().await.unwrap();
}
#[async_std::main]
async fn main() {
let listener = TcpListener::bind("127.0.0.1:7878").await.unwrap();
listener
.incoming()
.for_each_concurrent(/* limit */ None, |tcpstream| async move {
let tcpstream = tcpstream.unwrap();
handle_connection(tcpstream).await;
})
.await;
}実行する
$ cargo run
リクエストを送る
bash-5.1$ curl http://127.0.0.1:7878/ -v * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 7878 (#0) > GET / HTTP/1.1 > Host: 127.0.0.1:7878 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK * no chunk, no close, no size. Assume close to signal end < aaaaaa * Closing connection 0 bash-5.1$