#sockets #server #reload #tcp-socket #child-process #env-var

app catflap

创建一个TCP套接字并将其描述符作为环境变量传递

3 个稳定版本

使用旧的 Rust 2015

1.2.0 2020年5月28日
1.1.0 2017年5月11日
1.0.0 2017年5月8日

开发工具 中排名 1786

每月下载 27

MIT 许可证

10KB
114 代码行

猫眼

Crate release version Crate license: MIT Crate download count Build status (Travis)

这是一个针对类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 和类似错误,因为它们尝试监听相同的地址,但操作系统还没有释放它们。此外,因为套接字始终绑定,请求只是等待程序回答,而不是在服务器重新启动时失败,从而提供了更好的开发体验。

通常,进程管理器会实现此功能,例如 systemdlithosFlask 开发服务器。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