WebSocket 和 http 有什么区别?

129 阅读1分钟

WebSocket

  • 支持端对端通讯

  • 可以由 client 发起,也可以由 server 发起

  • 用于:消息通知,直播间讨论,聊天室,协同编辑等

  • 实际项目中推荐使用 socket.io,API 更简洁

WebSocket 连接过程

  • 先发起一个 HTTP 请求

  • 成功之后再升级到 WebSocket 协议,再通讯

WebSocket 案例


// 服务端

const { WebSocketServer } = require("ws");

const wxServer = new WebSocketServer({ port: 3000 });

wxServer.on("connection", (wx) => {

console.log("connected");

// 接收信息

wx.on("message", (msg) => {

console.log("收到了信息:", msg.toString());

setTimeout(() => {

// 服务端向客户端发送信息

wx.send("服务端已经收到了信息!" + msg.toString());

}, 2000);

})

})


<!-- 客户端 -->

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>web-socket</title>

</head>

<body>

<button id="btn-send">发送消息</button>

<script>

const ws = new WebSocket("ws:127.0.0.1:3000");

ws.onopen = () => {

console.log("opend");

ws.send("client opend");

}

ws.onmessage = event => {

console.log("客户端收到信息:", event.data);

}

const btnSend = document.getElementById("btn-send");

btnSend.addEventListener("click", () => {

console.log("clicked");

ws.send("当前时间:" + Date.now());

})

</script>

</body>

</html>

WebSocket 和 HTTP 区别

  • WebSocket 协议名是 ws://,可双端发起请求

  • WebSocket 没有跨域限制

  • 通过 send 和 onmessage 通讯(http 通过 req 和 res)

WebSocket 和 HTPP 长轮询有什么区别?

  • HTTP 长轮询:客户端发起请求,服务端阻塞,不会立马返回

  • WebSocket:客户端可发起请求,服务端也可发起请求