|
|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在传统的网页中,浏览器与服务器之间的通信通常是通过 HTTP 协议完成的。HTTP 是一种“请求-响应”模式的协议:浏览器(客户端)发送请求,服务器返回数据。
这种方式虽然简单稳定,但有一个明显的缺点——通信是单向的。也就是说,只有客户端主动请求,服务器才能响应。
而在一些需要实时通信的场景中,例如:
传统 HTTP 就显得力不从心了。
这时,WebSocket 就登场了。
一、WebSocket 的概念
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。
简单来说,它让浏览器和服务器之间可以实时地互相发送数据,而不必每次都重新建立连接。
WebSocket 最早在 HTML5 中被引入,用来解决网页实时通信的问题。
它的连接是通过 HTTP 协议发起的“握手”请求建立的,但一旦连接成功,就不再受 HTTP 的限制。
二、WebSocket 的工作原理
浏览器先通过一个特殊的 HTTP 请求(带有 Upgrade: websocket 头)向服务器发起连接请求。
如果服务器支持 WebSocket,就会返回一个确认响应(101 Switching Protocols),表示协议升级成功。
握手完成后,HTTP 协议升级为 WebSocket 协议。
此时,客户端与服务器之间形成一个持久连接,双方都可以随时主动发送数据。
客户端可以向服务器主动发送消息。
服务器也可以主动向客户端推送数据。
所有消息都通过这个持续存在的连接传输,无需频繁建立连接。
当一方发送关闭信号时,连接被终止。
三、WebSocket 与 HTTP 的区别
| 对比项 | HTTP | WebSocket | | 通信模式 | 请求-响应(单向) | 全双工(双向) | | 连接状态 | 每次请求都会建立新连接 | 一次握手后保持长连接 | | 传输效率 | 低(频繁握手、开销大) | 高(实时通信) | | 适用场景 | 普通网页请求 | 实时交互、推送数据 | | 协议端口 | 80(HTTP)/ 443(HTTPS) | 80(ws)/ 443(wss) | 四、WebSocket 的优点
实时性强:消息可以在毫秒级内传输。
节省带宽:只需一次握手,后续通信不再重复发送请求头。
双向通信:服务器可以主动通知客户端。
兼容性好:多数现代浏览器(Chrome、Firefox、Edge、Safari)都原生支持。
五、WebSocket 使用示例
前端 JavaScript 连接 WebSocket:
// 创建连接
const socket = new WebSocket("wss://example.com/chat");
// 连接成功
socket.onopen = () => {
console.log("连接已建立");
socket.send("Hello Server!");
};
// 接收消息
socket.onmessage = (event) => {
console.log("收到服务器消息:", event.data);
};
// 关闭连接
socket.onclose = () => {
console.log("连接已关闭");
};
服务器端可以用 Node.js、Python、Go、Java 等语言实现 WebSocket 服务。例如 Node.js 常见的 ws 库:
import { WebSocketServer } from 'ws';
const wss = new WebSocketServer({ port: 8080 });
wss.on('connection', (ws) => {
console.log('客户端已连接');
ws.send('欢迎加入!');
ws.on('message', (message) => {
console.log('收到消息:', message.toString());
});
}); 六、总结
WebSocket 的出现让 Web 实现了真正意义上的“实时通信”。
相比传统的 HTTP 轮询或长轮询方式,WebSocket 更高效、更稳定,也更适合需要快速数据交互的现代 Web 应用。
一句话总结:
WebSocket = 浏览器和服务器之间的“实时电话线”。
|
|