优秀的编程知识分享平台

网站首页 > 技术文章 正文

WebSocket的API似有缺陷(websocket优缺点)

nanyue 2024-08-30 20:47:42 技术文章 5 ℃

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。

最近发表
标签列表