頭條地址:https://www.ixigua.com/i680718929763709798...
B站地址:https://www.bilibili.com/video/BV177411m78...
https://github.com/anonymousGiga/web-serve...
本節的例子開始教大家用Rust語言建立一個簡單的web server程式。
web server 中涉及到的兩個主要協議是 超文字傳輸協議(Hypertext Transfer Protocol,HTTP)和 傳輸控制協議(Transmission Control Protocol,TCP)。這兩者都是 請求-響應(request-response)協議,也就是說,有 客戶端(client)來初始化請求,並有 服務端(server)監聽請求並向客戶端提供響應。請求與響應的內容由協議本身定義。
TCP為底層協議,一般來說,HTTP構建於HTTP之上。本節就是處理 TCP 和 HTTP 請求與響應的原始位元組資料。
https://doc.rust-lang.org/std/net/index.ht...
pub struct TcpListener(_); //A TCP socket server, listening for connections.
重點關注其以下兩個函式:
函式:pub fn bind<A: ToSocketAddrs>(addr: A) -> Result<TcpListener>;
功能描述:繫結伊特特定的地址建立一個TcpListener。
函式:pub fn incoming(&self) -> Incoming;
功能描述:返回連結接收的迭代器。
use std::net::{TcpListener, TcpStream};
fn handle_client(_stream: TcpStream) {
println!("有一個連結");
}
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:80")?;
for stream in listener.incoming() {
handle_client(stream?);
}
Ok(())
}
將上面的handle_client的內容修改為如下:
fn handle_client(stream: TcpStream) {
let mut buffer = [0; 512];
stream.read(&mut buffer).unwrap();
println!("Request: {}",
String::from_utf8_lossy(&buffer[..]));
}
重新執行,即列印連結請求的內容
本作品採用《CC 協議》,轉載必須註明作者和本文連結