1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 4 月 13 日 |
---|
#202 在 WebSocket 中
96KB
910 行
WebSocket 开发者 CLI
由于 WebSocket 的有状态特性,它们可能很难处理。在 Web 浏览器中打开 WebSocket,就像处理 RESTful API 一样,并不是真正可行的,因此需要工具。wurl(发音为“whirl”)就是那个工具。
它是基于 wsta 的全新重写。仍处于重工作流中,但可使用。
内容
亮点
- 从 CLI 向 WebSocket 服务器发送和接收消息
- 设计可组合,与 UNIX 管道配合良好
- 易于学习
- 固有的可脚本化
- 遵循 UNIX 哲学:做好一件事,做好一件事
- 用 rust 编写,提供类型安全和线程安全
- 作为 rust 库可扩展
用法
USAGE:
wurl [FLAGS] [OPTIONS] <URL>
FLAGS:
-e, --echo Enables echoing of outgoing frames
-h, --help Prints help information
-i, --include Include the HTTP headers in the output
-s, --silent Supresses all output except incoming frames
-V, --version Prints version information
-v, --verbose Increments verbosity by one
OPTIONS:
-H, --header <header:value>... Adds headers to the WebSocket HTTP handshake
-C, --control-frames <type> Enables echoing of control frames [possible values: all, in, out]
ARGS:
<URL> The URL of the server to connect to
连接到服务器
要使用 wurl
连接到服务器,您只需传递一个参数,即 WebSocket 服务器的 URL。
$ wurl wss://echo.websocket.org
Connected to wss://echo.websocket.org
之后,wurl
将监听 stdin,并将读取到的任何行作为消息发送到服务器。也支持 WebSocket 控制帧,有关详细信息,请参阅控制帧部分。
如果您传递 -, --echo
标志,您将看到出去的帧。这些总是以 >
和一个空格开头,以确保它们可以被过滤出来。
显示更多信息
您有时可能会遇到连接到服务器的问题。在这种情况下,查看 WebSocket 升级请求的更多信息可能很有用。为此,请传递 -
标志。
$ wurl -i wss://echo.websocket.org
WebSocket upgrade request
---
GET / HTTP/1.1
Connection: Upgrade
Host: echo.websocket.org:443
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: bIkIvw9EcchOo931ELJpOg==
Upgrade: websocket
Origin: https://echo.websocket.org
WebSocket upgrade response
---
HTTP/1.1 101 Web Socket Protocol Handshake
Connection: Upgrade
Date: Mon, 09 Apr 2018 18:00:10 GMT
Sec-WebSocket-Accept: 9j72nbYPuMMhmEpRl4xmN+YnZDI=
Server: Kaazing Gateway
Upgrade: websocket
Connected to wss://echo.websocket.org
显示控制帧可能很有用,例如,查看您的服务器是否正确地 ping。
控制帧
将支持使用命令向服务器发送控制帧。目前可用的命令包括
/ping
- 发送 ping 帧/ping <message>
- 发送带有给定消息的 ping 帧/pong
- 发送 pong 帧/pong <message>
- 发送带有给定消息的 pong 帧/close <code>
- 向服务器发送关闭代码/close <code> <msg>
- 向服务器发送带指定信息的关闭代码
如果需要发送包含前导斜杠的帧,如上述命令,请添加前导空格以进行转义。
认证
wurl
中没有内置认证,但可以设置自定义头。使用 -H
选项设置所需的所有认证头。
有关自动设置认证头的方法,请参阅 wurl-auth。
示例
插件
主要的 wurl 可执行文件故意保持小巧。许多其他程序与 wurl
集成良好,其中一些提供了您可能需要的功能。以下是一些设计用于与 wurl
一起工作的程序。
- wurl-auth - 设置认证头
- wurl-tools - 简单地自动化发送消息
如果您创建了有趣的东西,请随时添加到此列表。
wurl 与 wsta 的比较
优点
- 使用现代 rust 工具链和库从头开始重写
- 由于新的异步、事件驱动架构和无锁,(应该是) 更快,并能够处理更高的吞吐量
- 现在是一个库,也是一个 CLI,这使得 rust 程序员可以以编程方式控制 wurl
- 支持控制帧
- 遵循 UNIX 哲学,与 wsta 一样适合管道
- 支持基于 musl 的操作系统(如 alpine linux)
- 支持基于 LibreSSL 的操作系统??
- 通过第一方分发的 Docker 镜像
缺点
- 不支持二进制数据。如果需求足够,将来可能会支持。请参阅 此问题
- 没有 man 页面(尚无)
- 没有通过操作系统包管理器进行第一方分发。wsta 使用的系统不令人满意,将不再使用。打包将由志愿者完成。(悄悄地,想 成为打包者吗?)
安装
第一方分发
第三方分发
- 尚无
crates.io
尚未发布
$ cargo install wurl
如果您是 rust 程序员,可以使用 cargo CLI 轻松安装 wurl。
要更新到新版本,只需在安装时覆盖旧的可执行文件即可。
$ cargo install --force wurl
二进制文件
GitHub 上所有标记的版本都附带了编译的二进制文件。
docker
$ docker run -it --rm --network=host esphen/wurl
如果您还没有安装 rust 工具链,并且您的操作系统没有相应的包,您可以使用 Docker 镜像,它将在所有支持 Docker 的平台上运行。
如果您使用 Docker,添加一个别名以便通过 Docker 运行它可能是个好主意。例如
$ alias wurl="docker run -it --rm --network=host esphen/wurl"
其他分发系统
您想为您的操作系统维护一个包吗?如果它尚未列出,请随意将其添加到您选择的包管理器中。完成后,请创建一个 pull request 以将其添加到上面的列表中。
依赖关系
~8MB
~167K SLoC