apt install websocketd安装服务端。再准备个t.sh:
#! /bin/sh
while :; do
date
sleep 1
done
这是个无限循环infinite loop;: is the null命令, its exit status is true and啥也不干。
websocketd -port 8080 ./t.sh运行服务端。因为8080 > 1024,所以普通用户可运行。
输入并测试下面的客户端:
<script>
function log(x) { console.log(x) }
var ws;
function construct() {
ws = new WebSocket("ws://127.0.0.1:8080");
log('new');
}
function set_on_x() {
ws.onopen=function(e) { log('open'); }
ws.onmessage=function(e) { log(e.data); }
}
</script>
<button onclick=construct()>new</button>
<button onclick='set_on_x()'>set_on_x</button>
<button onclick='log(ws)'>status</button>
点击new,过几秒再点击set_on_x,在Firefox 115.12.0esr (64 位)下:
- onmessage不断被调用
- onopen未被调用;点击status发现ws的onopen属性设上了
构造函数WebSocket(url[, protocols]),url是必须的。窃以为应改为可选,并增加个open(url)方法;目前只有close([code[, reason]])和send(data)。
把域名改成www.baidu.com:new WebSocket立刻返回,过几秒后浏览器在console里提示:Firefox无法建立到...的连接。在此之前点status发现readyState=0 (CONNECTING),之后3 (CLOSED)。域名能解析但端口打不开此效果才好。
用websocketd -port 8080 ls运行服务端,ls命令退出后,服务端显示...DISCONNECT...,客户端readyState=3。