An HTTP/1.1 server for zig
0

Configure Feed

Select the types of activity you want to include in your feed.

doc: add html streaming example (#172)

+57 -2
+3 -2
build.zig
··· 70 70 .{ .file = "examples/08_websocket.zig", .name = "example_8" }, 71 71 .{ .file = "examples/09_shutdown.zig", .name = "example_9", .libc = true }, 72 72 .{ .file = "examples/10_file_upload.zig", .name = "example_10" }, 73 + .{ .file = "examples/11_html_streaming.zig", .name = "example_11" }, 73 74 }; 74 75 75 76 { ··· 81 82 .target = target, 82 83 .optimize = optimize, 83 84 .imports = &.{ 84 - .{.name = "httpz", .module = httpz_module}, 85 - } 85 + .{ .name = "httpz", .module = httpz_module }, 86 + }, 86 87 }), 87 88 }); 88 89 if (ex.libc) {
+54
examples/11_html_streaming.zig
··· 1 + const std = @import("std"); 2 + const httpz = @import("httpz"); 3 + const Allocator = std.mem.Allocator; 4 + 5 + const PORT = 8801; 6 + 7 + /// This example demonstrates HTML streaming. 8 + pub fn main() !void { 9 + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 10 + const allocator = gpa.allocator(); 11 + 12 + var server = try httpz.Server(void).init(allocator, .{ 13 + .port = PORT, 14 + }, {}); 15 + defer server.deinit(); 16 + 17 + // ensures a clean shutdown, finishing off any existing requests 18 + // see 09_shutdown.zig for how to to break server.listen with an interrupt 19 + defer server.stop(); 20 + 21 + var router = try server.router(.{}); 22 + 23 + router.get("/", index, .{}); 24 + 25 + std.debug.print("listening http://localhost:{d}/\n", .{PORT}); 26 + 27 + // Starts the server, this is blocking. 28 + try server.listen(); 29 + } 30 + 31 + fn index(_: *httpz.Request, res: *httpz.Response) !void { 32 + const wait_time = 1_000_000_000; // 1 second 33 + 34 + try res.chunk( 35 + \\<!DOCTYPE html> 36 + \\<html> 37 + \\ <body> 38 + \\ <template shadowrootmode="open"> 39 + \\ <ul> 40 + \\ <li><slot name="item-0">Loading...</slot></li> 41 + \\ <li><slot name="item-1">Loading...</slot></li> 42 + \\ <li><slot name="item-2">Loading...</slot></li> 43 + \\ </ul> 44 + \\ </template> 45 + \\ </body> 46 + \\</html> 47 + ); 48 + std.Thread.sleep(wait_time); 49 + try res.chunk("\n<span slot='item-2'>Item 2</span>"); 50 + std.Thread.sleep(wait_time); 51 + try res.chunk("\n<span slot='item-0'>Item 0</span>"); 52 + std.Thread.sleep(wait_time); 53 + try res.chunk("\n<span slot='item-1'>Item 1</span>"); 54 + }