3 个稳定版本
使用旧的 Rust 2015
1.2.0 | 2020年5月28日 |
---|---|
1.1.0 | 2017年5月11日 |
1.0.0 | 2017年5月8日 |
在 开发工具 中排名 1786
每月下载 27 次
10KB
114 代码行
猫眼
这是一个针对类Unix系统的小型命令行工具,它会根据您指定的地址创建一个TCP套接字,然后将该套接字的FD索引通过环境变量传递给子进程。然后(或任何后代)可以绑定套接字。
这个想法是为需要重新加载服务器的工具,例如 cargo watch
$ catflap cargo watch
[Catflap listening at 127.0.0.1:5000]
[Running 'cargo run']
Compiling sample-server v0.1.0 (file:///home/code/rust/test)
Finished dev [unoptimized + debuginfo] target(s) in 0.71 secs
Running `target/debug/sample-server`
Binding to socket FD 3
Serving requests...
[[ Some file is changed so the server is reloaded ]]
[Running 'cargo run']
Compiling sample-server v0.1.0 (file:///home/code/rust/test)
Finished dev [unoptimized + debuginfo] target(s) in 0.84 secs
Running `target/debug/sample-server`
Binding to socket FD 3
Serving requests...
[[ etc ]]
绑定到 端口 的服务器可能会遇到 EADDRINUSE 和类似错误,因为它们尝试监听相同的地址,但操作系统还没有释放它们。此外,因为套接字始终绑定,请求只是等待程序回答,而不是在服务器重新启动时失败,从而提供了更好的开发体验。
通常,进程管理器会实现此功能,例如 systemd,lithos 或 Flask 开发服务器。Catflap 是一个单一用途的工具,只做这件事,因此它可以以极低的成本用于您的开发环境。
安装
常规方法
$ cargo install catflap
或者,升级
$ cargo install --force catflap
用法
$ catflap [options] [--] <command> [args...]
$ catflap -e LISTEN_FDS -- <command> [args...]
$ catflap -h 0.0.0.0 [--] <command> [args...]
$ catflap -p 8000 [--] <command> [args...]
选项 | 默认 | 描述 |
---|---|---|
- ,--env |
LISTEN_FD |
将包含套接字FD的环境变量。 |
- ,--host |
127.0.0.1 |
绑定套接字的IP地址(IPv4或IPv6,不允许域名)。 |
- ,--port |
5000 |
绑定套接字的端口号。 |
命令特定
<command>
将直接执行,而不通过shell传递,因此不能直接使用shell语法。此外,您可以使用 --
将catflap选项与程序选项分开
$ catflap 'foo && bar'
# Will error because 'foo && bar' doesn't exist in PATH
$ catflap sh -c 'foo && bar'
# Will error because '-c' is not a catflap option
$ catflap -- sh -c 'foo && bar'
# Will work!
端口号为零
如果您指定端口为零,系统将随机选择一个未使用的端口。Catflap在执行给定命令之前打印出套接字的实际地址,以便您可以找到正确的端口进行连接。
$ catflap -p 0 cargo watch
[Catflap listening at 127.0.0.1:55917]
示例服务器
这些可以直接在相应的文件夹中构建和运行。然后只需: $ curl -i http://localhost:5000
。
等等
许可协议:MIT。由Félix Saparelli制作。
这个名字既是因为它是一个小门,你可以安装它,这样你就不必不断地开关一个更大的门来让你的毛茸茸的伙伴进出,也是对netcat
工具的一种戏谑。
依赖关系
约2.5MB
约40K SLoC