websocketd:把命令行程序变成 WebSocket 服务,写几行脚本就行

正文顶部截图

joewalnes/websocketd 是一个命令行工具,它能包装一个现有的命令行程序,然后通过 WebSocket 协议来访问它。

README区域截图

换句话说,只要你会写一个读取标准输入、输出到标准输出的可执行程序(不管是 Python、Ruby、Bash、PHP、Go 还是其他语言),就能用它搭出一个 WebSocket 服务,完全不需要碰任何网络编程的库。

启动后,websocketd 会在指定端口上创建一个 WebSocket 服务端,等待连接进来。每次有连接进来,它就会 fork 出对应的进程,连接关闭时进程也会结束。客户端发来的消息被管道送到进程的标准输入,进程往标准输出打印的内容,每遇到一个换行符,就会作为一条 WebSocket 消息发回去。

快速上手

写一个每秒数一个数、数到 10 就断开的 WebSocket 端点。用 Bash 实现:

#!/bin/bash
for ((COUNT = 1; COUNT <= 10; COUNT++)); do
  echo $COUNT
  sleep 1
done

先在命令行测试一下,结果和预期一致,再启动服务:

websocketd --port=8080 ./count.sh

前端页面只需要几行 JavaScript 就能连上:

<!DOCTYPE html>
<pre id="log"></pre>
<script>
  var ws = new WebSocket('ws://localhost:8080/');
  ws.onmessage = function(event) {
    document.getElementById('log').textContent += event.data + '\n';
  };
</script>

直接用浏览器打开这个 HTML 文件(用 file:// 协议)就能工作。

其他功能

安装很简单,下载一个可执行文件就能跑,不需要安装器或包管理器。服务端脚本可以通过标准 CGI 环境变量拿到 WebSocket 请求的细节,比如客户端 IP、查询参数、Cookie 等。它还附带了一个静态文件服务器和传统 CGI 服务器,以及一个 WebSocket 开发者控制台,方便在写前端之前先测试脚本。

项目提供了多种编程语言的示例,包括 Python、Ruby、Perl、PHP、Java、Go 等。

适合的场景

对于需要把现有的命令行工具或脚本快速暴露成 WebSocket 服务的场景,websocketd 是最省力的方案。不需要改代码,不需要引入 WebSocket 库,写一个脚本加一行命令就能搞定。

cketd 是最省力的方案。不需要改代码,不需要引入 WebSocket 库,写一个脚本加一行命令就能搞定。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐