1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 4 月 13 日

#202WebSocket

GPL-3.0 许可证

96KB
910

wurl

WebSocket 开发者 CLI

Build Status

由于 WebSocket 的有状态特性,它们可能很难处理。在 Web 浏览器中打开 WebSocket,就像处理 RESTful API 一样,并不是真正可行的,因此需要工具。wurl(发音为“whirl”)就是那个工具。

它是基于 wsta 的全新重写。仍处于重工作流中,但可使用。

Example of usage

内容

亮点

  • 从 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 与 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