WEB 长连接
以前的Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。
轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。
这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。
WebSocket
if ("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文件
<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聊天,逐字返回。
if (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();
}
最后更新于 2025年6月22日