#sse #daemon #command-line-tool #http #cli

app cmdpiped

用于将封装的 CLI 程序的标准 I/O 暴露给 WebSocket/SSE 的命令行工具

1 个不稳定版本

0.1.0 2022 年 7 月 24 日

#266 in WebSocket

MIT/Apache

135KB
327

cmdpiped

cmdpiped 是一个将封装的 CLI 程序的标准 I/O 暴露给 WebSocket/SSE 的命令行工具

安装

可用的预编译二进制文件在发布页面。

对于 Rust 用户,您可以使用 cargo

cargo install cmdpiped

用法

USAGE:
    cmdpiped [OPTIONS] --mode <MODE> [SUBCOMMAND]

OPTIONS:
    -h, --host <HOST>      Host address to bind [default: 127.0.0.1]
        --help             Print help information
    -m, --mode <MODE>      Mode to expose events [possible values: ws, sse]
    -p, --port <PORT>      Port to bind [default: 9000]
        --path <PATH>      Url path to setup [default: /events]
        --serve <SERVE>    Optional folder path to serve static files
    -V, --version          Print version information

您还可以使用管道

$ node ./index.js | cmdpiped -m sse

示例

一些基本示例

cmdpiped 是语言无关的,应该能够轻松地集成到任何可以在命令行上运行的程序中。

Python
from sys import stdout
from time import sleep

# Count to 100 sleeping every second
for count in range(0, 100):
  print(count + 1)
  stdout.flush()
  sleep(1)

将文件保存为 counter.py 并运行 cmdpiped

$ cmdpiped -m sse python3 ./counter.py
Node.js
let count = 0;

setInterval(() => {
  console.log(count++);
}, 1000);

将文件保存为 index.js 并运行 cmdpiped

$ cmdpiped -m sse node ./index.js
Bash
#!/bin/bash

# Count from 1 to 100 with a sleep of 1 second
for ((COUNT = 1; COUNT <= 100; COUNT++)); do
  echo $COUNT
  sleep 1
done

将文件保存为 script.sh 并运行 cmdpiped

$ chmod +x ./script.sh
$ cmdpiped -m sse ./script.sh

您应该能够得到

[2022-07-24T13:41:11Z TRACE actix_server::worker] Service "actix-web-service-127.0.0.1:9000" is available
[2022-07-24T13:41:11Z TRACE cmdpiped::broadcaster] Send: "data: 1\n\n"
[2022-07-24T13:41:11Z TRACE cmdpiped::broadcaster] Send: "data: 2\n\n"
[2022-07-24T13:41:12Z TRACE cmdpiped::broadcaster] Send: "data: 3\n\n"
[2022-07-24T13:41:13Z TRACE cmdpiped::broadcaster] Send: "data: 4\n\n"
...

高级示例

使用上述示例,我们可以添加一些前端代码

  1. 创建一个名为 static 的文件夹。
  2. 添加一个 index.html 文件
<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript">
      var source = new EventSource("https://127.0.0.1:9000/events");
      source.onmessage = function (event) {
        var content = document.getElementById("content");
        content.innerHTML = content.innerHTML + event.data + "<br/>";
      };
    </script>
  </head>
  <body>
    <div id="content"></div>
  </body>
</html>

运行 cmdpiped 暴露目录

$ cmdpiped -m sse --serve ./static

完整示例

完整示例可在 此处 获取

Complete Example

路线图

  • SSE 流
  • WebSocket 服务器 -> 客户端
  • WebSocket 客户端 -> 服务器

版本控制

我们使用 SemVer 进行版本控制。有关可用的版本,请参阅 此存储库上的标签

作者

有关参与此项目的其他 贡献者 的列表,请参阅。

许可

此项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件

依赖项

~19–32MB
~550K SLoC