赛博信箱

A self-idea of this sort seems to have three principal elements: the imagination of our appearance to the other person; the imagination of his judgement of that appearance; and some sort of self-feeling, such as pride or mortification.

— Charles Horton Cooley, The Looking-Glass Self

这是什么?

这是 敌我关系彩票网 一个匿名的提问页面,你可以在里面给我发送任何内容、建议、意见或者别的任何东西。

如果你愿意留下邮箱的话,在我回复你的时候会收到通知,当然不愿意的话就只好定期访问消息页面查看了。

提问页

点击 这里 或者导航栏的 信箱 按钮来访问。

你认出我了怎么办?

说实话,我几乎不可能认得出来谁写了什么,从技术上来说也是如此。除非你在里面写了能明确表明身份的东西,否则大可不用担心这一点。

为什么叫这个名字

这是因为有一天AI发狂输出了这个奇怪的词,而且我觉得很有意思

有意思的点

其实本来想用 Python 的 flask 模块写的,但是我租的服务器只有 1G 内存(sad),于是理所当然地选择了 Rust 编写这个服务的后端。

这个服务端仅仅使用 15MB 左右的内存,而且我感觉还能凹。

说起来也有意思,我每次用 Rust 写 http 服务器,都会用完全不同的库。一方面是因为 Rust 在这方面提供的选项太多了,另一方面我也想对比一下不同库的优缺点。

Axum

这次使用 Axum 作为 http 服务器,这个库给我的第一感觉就是方便,相比其他的 http 服务器,从创建路由处理函数到解析请求内容,都有很容易理解的包装。

最简单的服务器只需要以下代码

1
2
3
4
5
6
7
8
9
10
11
12
use axum::{
routing::get,
Router,
};

#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, World!" }));

let listener = tokio::net::TcpListener::bind("127.0.0.1:3456").await.unwrap();
axum::serve(listener, app).await.unwrap();
}

访问 http://127.0.0.1:3456 就可以看到一个 Hello World,相当方便

对于更复杂的路由处理函数,则需要使用 axum 库中的其他内容。例如,以下是一个处理携带了 json 的 POST 路由处理函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#[derive(Deserialize)]
pub struct Message {
content: String,
email: String,
nickname: String
}

// 这里需要使用 axum 的 macros feature
// 还是建议调试的时候使用一下,否则难以定位到底哪里写的不合法
// 当时我没加这个对着奇怪的报错折腾了半天……
#[axum::debug_handler]
pub async fn new_message(
Json(msg): Json<Message>,
) -> StatusCode {
println!("{}", msg.nickname);

StatusCode::OK
}

赛博信箱
https://mygo.plus/articles/ask-me-anonymous/
作者
Peter Shen
发布于
2025年12月1日
许可协议