websocketd
是一个小型命令行工具,它将包装现有的命令行界面程序,并允许通过WebSocket访问它。
现在可以非常轻松地构建支持WebSocket的应用程序。只要你能写一个可执行程序,读取STDIN
和写入 STDOUT
,你可以建立一个WebSocket的服务器。在Python,Ruby,Perl,Bash,.NET,C,Go,PHP,Java,Clojure,Scala,Groovy,Expect,Awk,VBScript,Haskell,Lua,R等中做它!不需要网络库。
启动时,websocketd
将在指定端口上启动WebSocket服务器,并侦听连接。
在连接时,它将分叉适当的进程,并在WebSocket连接关闭时断开进程(反之亦然)。
从WebSocket客户端发送的任何消息都将通过管道传输到进程的STDIN流,然后是\n换行符。
STDOUT
每当遇到换行符 \n
时,进程打印的任何文本都应作为WebSocket消息发送。
如果您使用的是Mac,则可以使用 Homebrew进行安装websocketd
. 只要运行 brew install websocketd
。对于其他操作系统,或者如果您不想使用Homebrew,请查看以下链接。
首先,我们将创建一个WebSocket端点,它将接受连接,然后发送回消息,计数到10,每个消息之间暂停1秒,然后再断开连接。
为了表明它是多么简单,让我们在Bash中做到!
count.sh:
#!/bin/bash
for ((COUNT = 1; COUNT <= 10; COUNT++)); do
echo $COUNT
sleep 1
done
在将其转换为WebSocket服务器之前,让我们从命令行进行测试。其优点websocketd
在于服务器在命令行或shell脚本中的工作方式与在服务器中的工作方式相同 - 无需修改。
$ chmod +x count.sh
$ ./count.sh
1
2
3
4
5
6
7
8
9
10
现在让我们把它变成一个WebSocket服务器:
$ websocketd --port=8080 ./count.sh
最后,让我们创建一个测试它的网页。
count.html:
<!DOCTYPE html>
<pre id="log"></pre>
<script>
// helper function: log message to screen
function log(msg) {
document.getElementById('log').textContent += msg + '\n';
}
// setup websocket with callbacks
var ws = new WebSocket('ws://localhost:8080/');
ws.onopen = function() {
log('CONNECT');
};
ws.onclose = function() {
log('DISCONNECT');
};
ws.onmessage = function(event) {
log('MESSAGE: ' + event.data);
};
</script>
在Web浏览器中打开此页面。 如果您使用file://
URL 直接从磁盘打开它,它甚至会工作。
websocketd --help
。有更多的例子吗?打开拉取请求。