Skip to content

natsunoyoru97/rust-http-server-tutorial

Repository files navigation

用Rust实现一个简单异步HTTP服务器

**目前网络编程部分和教程尚未完成!!**主程序的异步HTTP服务器可以编译运行,目前支持GET、一些常用的MIME格式以及日志。

上传到github只是想警示一下喜欢鸽的自己,你还有事要做赶紧干正事

这篇教程是现学现卖,有什么知识理念上的错误和不足欢迎提出PR!

本教程由mdBook制作,可以将代码仓库拷贝至本地运行电子书和示例代码:

  • 本地运行电子书
  cd rust-http-server-tutorial
  mdbook serve
  • 本地运行主程序
cd rust-http-server-tutorial
cargo run -- <ip-addr> [port]

默认端口是8080。

  • 本地运行示例代码
  cd rust-http-server-tutorial
  cargo run --example <示例代码名称> -- [args..]

目前支持的示例

注意:虽然这些示例均可运行,但目前不保证对异常情况的处理,还有很多功能没有完善。

  • simple_client

  • simple_server

  • simple_http_server

目前可以参考的性能测试结果

所有性能测试的结果均在./loadtest_log文件夹下。

目前只有 Alma Linux 服务器上使用 npm 插件 loadtest 进行压力测试的结果(日后更新具体环境信息)。

  • simple_http_server
  • async_http_server

TODOs

  • 重构代码,在重构完成之前暂时不添加新功能

  • 支持POST

  • 支持404等其它HTTP状态码

  • 处理更多异常情况

  • 日志系统:

    • 支持环境参数和 toml 设置日志信息
    • 支持输出日志文件
  • HTTP 服务器框架

    • 支持 K/V 存储和获取
    • 完善 CLI

为什么用Rust?

不正经的理由

因为实在不想看到每个HTTP服务器的实现都是C捆绑面条一样的代码。C确实最接近各个平台提供的网络套接字接口,但我不觉得这个优势足以让我舍弃程序逻辑的清晰简洁和适当的模块封装,且在冗余代码少的情况下实现友好的用户交互,鉴于网络服务器的逻辑比较复杂,面向过程的代码耦合度太高也难以迭代,所以C打咩(即答

既然C不行,那既兼容C又比C抽象表达能力更好的现代C++呢?C++也不是不行,但是我不太想和第三方库花太多时间纠缠,它的包管理也不咋友好(话说C++有模块和包管理的概念吗)🤔

有GC的语言就算了,Stop the World 的固有缺陷和一些别的坑我并不想踩。Rust作为一门无GC、需要手动管理内存的系统编程语言,程序的性能理论上讲会比有GC的语言好一截,这次想啃一下硬骨头。

正经的理由

我就是喜欢Rust,而且Rust在网络服务端的抽象能力和包管理还是可以的(叉腰。不然我要怎么从逻辑简洁的角度回答“为什么你不用go不用erlang不用kotlin”?

About

写个简陋的rust异步HTTP服务器

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published