WEB 长连接

以前的Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。

轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。

这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。

WebSocket

1if ("WebSocket" in window) {    const ws = new WebSocket("wss://www.krjojo.com/ws");    ws.onopen = function () {        console.log("succeed");    };    ws.onerror = function () {        console.log("error");    };    ws.onmessage = function (event) {        console.log(event);    };    // ws.close();}

socket.io

需要额外引用js文件

1<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script><script>    const socket = io("http://localhost:3000");    socket.on("connect", () => {        console.log("succeed");    });    socket.on("error", (error) => {        console.error("Socket error:", error);    });    socket.on("message", (event) => {        console.log(event);    });    // socket.close();</script>

SSE

客户端只能接受数据

广泛用在AI聊天,逐字返回。

1if (typeof (EventSource) !== "undefined") {    const sse = new EventSource("https://www.krjojo.com/SSE.php");    sse.onopen = function () {        console.log("succeed");    };    sse.onerror = function () {        console.log("error");    };    sse.onmessage = function (event) {        console.log(event);    };    // sse.close();}