网络编程

Toka 的网络模块提供 TCP、UDP 和 HTTP 能力,用于构建网络应用。

HTTP 客户端

使用 stdx/net/http 模块发起 HTTP 请求:

import core/result::Result

// 注意:HTTP 客户端正在开发中
fn fetch(url: string) -> Result<string, string> {
    // auto response = http::get(url)!
    // return Ok(response.body)
    return Result<string, string>::Ok(string::from("Response"))
}

HTTP 服务器

使用 stdx/net/http 模块构建简单的 HTTP 服务器:

import stdx/net/http::{HttpResponse, HttpRequest}

// 注意:HTTP 服务器通过将 std/net 与 stdx/net/http 集成构建
fn main() -> i32 {
    // auto listener# = TcpListener::bind(addr)
    // auto stream# = listener#.accept()
    // auto req# = parse_http_request(req_str)
    return 0
}

TCP 连接

使用 net 模块进行原始 TCP 通信:

import std/net::TcpStream
import std/io::println
import core/result::Result

fn handle_client(stream#: TcpStream) {
    auto buf: [u8; 1024] = [0:u8; 1024]
    auto *buf_ptr# = &buf[0] as *u8
    auto res = stream#.read(*buf_ptr, 1024:usize)
    match res {
        auto Result<usize, string>::Ok(n) => {
            println("收到 {} 字节", n)
            stream#.write_string(string::from("ACK"))
        }
        auto Result<usize, string>::Err(&e) => {
            println("错误")
        }
    }
}

WebSocket

对于实时双向通信,使用 stdx/websocket 模块:

import std/io::println

// 注意:WebSocket 正在开发中
fn echo_server() {
    // auto ws = websocket::Server::new()
    // ws.on_message(|msg| => println("Got: {}", msg))
    // ws.listen(9000)
}

URL 解析

import std/io::println
import core/result::Result
import stdx/net/url::{Url, parse_url}

fn example() {
    auto url_res = parse_url(string::from("https://api.example.com:8080/data?id=1#top"))
    match url_res {
        auto Result<Url, string>::Ok(&url) => {
            println("主机:{}", url.host)
            println("端口:{}", string::from_int(url.port as i32))
        }
        auto Result<Url, string>::Err(&err) => {
            println("错误:{}", err)
        }
    }
}