From 604857954be37f2f2fbcbfa7eb878438188496da Mon Sep 17 00:00:00 2001 From: xihale <1745488156@qq.com> Date: Sat, 8 Feb 2025 11:08:33 +0800 Subject: [PATCH] docs: add introduce for http-std (#83) Close #72 --------- Co-authored-by: xihale Co-authored-by: Jiacai Liu --- book-src/05-03-http-server-std.md | 12 ++++++++++++ book-src/SUMMARY.md | 1 + build.zig | 4 +++- src/05-03.zig | 22 ++++++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 book-src/05-03-http-server-std.md create mode 100644 src/05-03.zig diff --git a/book-src/05-03-http-server-std.md b/book-src/05-03-http-server-std.md new file mode 100644 index 0000000..44b1318 --- /dev/null +++ b/book-src/05-03-http-server-std.md @@ -0,0 +1,12 @@ +## http.Server - std + +Starting with release 0.12.0, a very simple implementation of `http.Server` has been introduced. + +```zig +{{#include ../src/05-03.zig }} +``` + +Note: The std implementation exhibits extremely poor performance. If you're planning beyond basic experimentation, consider utilizing alternative libraries such as: +- +- +- diff --git a/book-src/SUMMARY.md b/book-src/SUMMARY.md index bc1beac..e5cce32 100644 --- a/book-src/SUMMARY.md +++ b/book-src/SUMMARY.md @@ -29,6 +29,7 @@ - [HTTP Get](./05-01-http-get.md) - [HTTP Post](./05-02-http-post.md) + - [HTTP Server Std](./05-03-http-server-std.md) - [Algorithms]() diff --git a/build.zig b/build.zig index 5aacd6f..af629ee 100644 --- a/build.zig +++ b/build.zig @@ -75,9 +75,11 @@ fn addExample(b: *std.Build, run_all: *std.Build.Step) !void { // 04-01 start tcp server, and won't stop so we skip it here // 04-02 is the server's client. // 04-03 starts udp listener. + // 05-03 starts http server. if (std.mem.eql(u8, "04-01", name) or std.mem.eql(u8, "04-02", name) or - std.mem.eql(u8, "04-03", name)) + std.mem.eql(u8, "04-03", name) or + std.mem.eql(u8, "05-03", name)) { continue; } diff --git a/src/05-03.zig b/src/05-03.zig new file mode 100644 index 0000000..81fe5f8 --- /dev/null +++ b/src/05-03.zig @@ -0,0 +1,22 @@ +// reference: https://pismice.github.io/HEIG_ZIG/docs/web/std-http/ +const std = @import("std"); + +pub fn main() !void { + const addr = try std.net.Address.parseIp("127.0.0.1", 8080); + var server = try std.net.Address.listen(addr, .{ .reuse_address = true }); + + var buf: [65535]u8 = undefined; + const conn = try server.accept(); + + var client = std.http.Server.init(conn, &buf); + + while (client.state == .ready) { + var request = client.receiveHead() catch |err| switch (err) { + std.http.Server.ReceiveHeadError.HttpConnectionClosing => break, + else => return err, + }; + _ = try request.reader(); + + try request.respond("Hello http.std!", .{}); + } +}