websocket简介与根本使用

[复制链接]
发表于 2025-8-30 22:02:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
websocket是什么
WebSocket 是一种基于 TCP 的全双工通信协议,答应客户端和服务器之间创建持久连接,实现及时、双向的数据传输。它是 HTTP 协议的增补,专为低耽误、高效率的及时通信计划。
焦点特点
特性说明
全双工通信客户端和服务器可以同时发送和接收数据(不像 HTTP 的请求-相应模式)。
低耽误创建连接后,数据可以即时推送,无需频仍创建新连接。
持久连接一次握手后,连接保持打开状态,直到主动关闭。
轻量级数据包头较小(仅 2~10 字节),适合高频通信场景。
与 HTTP 的对比
WebSocketHTTP
通信模式双向通信(服务器可主动推送)单向请求-相应(客户端发起)
连接方式持久连接短连接(每次请求后关闭)
协议头轻量级(ws:// 或 wss://)较复杂(http:// 或 https://)
实用场景及时谈天、股票行情、游戏同步网页浏览、API 调用
工作原理

握手阶段
客户端通过 HTTP 发送升级请求(Upgrade 头):
  1. GET /chat HTTP/1.1
  2. Upgrade: websocket
  3. Connection: Upgrade
  4. Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
复制代码
服务器返回 101 Switching Protocols 确认升级为 WebSocket。
数据传输
握手成功后,两边通过二进制帧(Frame)传输数据,无需重复握手。
关闭连接
任一方发送关闭帧(Opcode 0x8)即可终止连接。
常见应用场景

及时谈天(如微信网页版)
在线协作工具(如 Google Docs 多人编辑)
股票行情推送
多人在线游戏
IoT 装备控制(如智能家居及时状态更新)
代码示例(JavaScript)
  1. // 客户端
  2. const socket = new WebSocket("wss://example.com/chat");
  3. // 监听消息
  4. socket.onmessage = (event) => {
  5.   console.log("收到消息:", event.data);
  6. };
  7. // 发送消息
  8. socket.send("Hello Server!");
  9. // 关闭连接
  10. socket.close();
复制代码
安全性

加密:使用 wss://(WebSocket Secure,基于 TLS/SSL)。
验证:通过 Sec-WebSocket-Key 和 Sec-WebSocket-Accept 防止恶意连接。
优缺点

优点:及时性强、节省带宽(相比 HTTP 轮询)。
缺点:
必要服务器持续维护连接(可能增加资源斲丧)。
部分老旧浏览器或网络装备可能不支持。
WebSocket 是现代及时应用的基石技能,结合后端框架(如 Socket.IO、WebSocket API)可轻松构建高效的双向通信系统。
长连接和短连接 

 WebSocket是长连接,那对应的短连接协议是啥?
在网络通信中,与 WebSocket 长连接相对应的 “短连接协议” 通常指基于请求 - 相应模式的传统通信协议,这类协议在数据传输完成后会主动断开连接。以下是常见的短连接协议及其特点:
一、典型短连接协议:HTTP/1.x
协议本质
基于 TCP 的无状态短连接协议,遵循 “请求 - 相应” 模式:客户端发送请求,服务器处置惩罚后返回相应,随后连接关闭。
每次通信都需履历 “三次握手创建连接→数据传输→四次挥手断开连接” 的完整流程。
短连接的局限性
效率问题:频仍通信时(如及时数据更新),每次请求都需重新创建连接,斲丧 CPU 和网络资源(如 TCP 握手耽误)。
应用场景:实用于非及时、低频率的资源获取(如网页浏览、文件下载),但不适合及时交互(如谈天、直播)。
二、其他短连接协议示例
协议应用场景与 WebSocket 的对比
HTTP/2优化版 HTTP 协议,支持多路复用,但本质仍是短连接(可配置长连接,但非持久化)。相比 HTTP/1.x 镌汰了连接创建开销,但未实现全双工及时通信。
UDP无连接协议(非 TCP 层面的 “连接” 概念),实用于低耽误场景(如游戏、视频流)。无连担当理,需上层协议(如 RTP)处置惩罚数据包顺序和可靠性。
MQTT over TCP物联网物联网消息协议,通常基于 TCP 短连接(也可配置长连接)。需额外实现心跳机制维持连接,及时性弱于 WebSocket。
REST API基于 HTTP 的接口计划风格,本质是短连接请求。常用于数据获取(如 API 接口调用),不适合持续数据推送。
三、长连接与短连接的焦点区别
维度短连接协议(如 HTTP)长连接协议(如 WebSocket)
连接状态单次请求后断开,下次通信需重新握手。一次握手后保持持久连接,可双向持续传输数据。
及时性适合 “被动获取” 数据,无法主动推送。支持服务器主动推送数据,及时性强。
资源占用每次连接斲丧资源,但空闲时不占用连接。持续占用 TCP 连接资源,但镌汰连接创建开销。
应用场景网页浏览、API 接口调用、文件下载等。及时谈天、直播弹幕、数据监控监控、协作编辑等。
四、为什么 WebSocket 是长连接的代表?
技能计划:WebSocket 通过一次握手(HTTP 升级请求)将连接升级为持久化通道,无需频仍重修连接,例如:
  1. // WebSocket建立长连接示例
  2. const socket = new WebSocket('ws://example.com');
  3. socket.onopen = () => {
  4.   // 连接持久化,可随时发送数据
  5.   socket.send('Hello');
  6. };
复制代码
对比 HTTP 短连接:若用 HTTP 实现及时推送(如轮询),需定时发送请求(如每秒请求一次),造成 “无效请求” 浪费(如服务器无新数据时仍返回空相应)。
五、总结:短连接协议的本质与实用场景
短连接协议的焦点是 “单次通信即断开”,其计划目标是 “按需获取资源”,而非 “持续交互”。当应用必要及时数据推送或双向高频通信时,长连接协议(如 WebSocket)是更优选择;而对于低频、非及时的请求(如加载网页、获取 API 数据),短连接协议(如 HTTP)则足够高效。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表