Rust 程式設計小專案:WebServer 01

linghuyichong發表於2020-03-23

頭條地址: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 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章