hyperlocal
Hyper是一个坚如磐石的Rust HTTP客户端和服务器工具包。
Unix域套接字提供了一种主机本地进程间通信的机制。hyperlocal
在Hyper的接口基础上进行了构建和补充,用于构建Unix域套接字HTTP客户端和服务器。
这在为Unix守护进程暴露简单的HTTP接口时非常有用,特别是在你想限制访问仅限于当前主机的情况下,此时不需要打开和暴露TCP端口。提供这种主机本地接口的Unix守护进程的例子包括Docker,一个进程容器管理器。
安装
在你的Cargo.toml
文件中添加以下内容
[dependencies]
hyperlocal = "0.9"
使用方法
服务器
典型的服务器可以通过创建一个tokio::net::UnixListener
并在循环中接受连接来构建,使用hyper::service::service_fn
创建一个请求/响应处理函数,并使用hyper::server::conn::http1::Builder::new().serve_connection()
将UnixStream
连接到它。
hyperlocal
提供了一个扩展trait UnixListenerExt
,其中包含了这个实现。
示例在examples/server.rs中,可以通过cargo run --example server
运行
要测试你的服务器是否工作,你可以使用现成的工具如curl
$ curl --unix-socket /tmp/hyperlocal.sock localhost
It's a Unix system. I know this.
客户端
hyperlocal
还提供了用于编写基于Unix域套接字的HTTP客户端的绑定,使用hyper-utils
crate中的Client
接口。
示例在examples/client.rs中,可以通过cargo run --example client
运行
Hyper的客户端接口使得发送典型的HTTP方法如GET
、POST
、DELETE
变得容易,它提供了工厂方法get
、post
、delete
等。这些方法需要一个可以转换为hyper::Uri
的参数。
由于Unix域套接字不是用可解析为IP地址和网络端口的主机名来表示的,你的标准URL字符串就不适用了。相反,使用hyperlocal::Uri
,它同时表示域套接字的文件路径和资源URI路径及查询字符串。
Doug Tangren (softprops) 2015-2024