WebSocket入门

一、定义
● WebSocket是HTML5下的一种新的协议(本质上基于tcp协议)。
● 实现了浏览器与服务器全双工通信,能更好的节省服务器资源和宽带并达到实时通讯的目的。
● 持久化的协议
二、原理

  1. websocket约定一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便他们之间的通信。
  2. 在websocket之前,web交互一般是基于http协议的短连接或者长连接。
  3. 是一种全新的协议,不属于http无状态协议,名为"ws"。
    三、websocket与http的关系

相同点:

  1. 都是基于tcp,都是可靠性传输协议。
  2. 都是应用层协议
    不同点:
  3. websocket是双向通信协议,模拟Socket协议,可双向发送或接受信息。
  4. HTTP是单向的
  5. websocket需要浏览器和服务器握手建立连接
  6. HTTP是浏览器发起向服务器的连接,服务器预先并不知道这个连接。
    联系:
    ● websocket在建立握手时,数据是通过Http传输的。建立连接后,真正传输不需要HTTP协议。
    总体交互过程:
  7. 首先,客户端发起Http请求,经过3次握手后,建立起TCP连接;HTTP请求里存放WebSocket支持的版本号等信息,
    如:Upgrade、Connection、WebSocket等;
  8. 然后,服务其收到客户端的握手请求后,同样用HTTP协议回馈数据;
  9. 最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
    四、WebSocket优势
    WebSocket连接建立后,数据以帧序列的形式传输。在客户端断开WebSocket连接或服务端终端之前,一直保持连接。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显性能优势,且客户端发送和接受消息时在同一个持久连接上发起的,实现了"真-长链接",实时性优势明显。

特点:
● 全双工通信方式,建立连接后客户端与服务端时完全平等的,可以互相主动请求。而Http长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
● HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换率很低。websocket建立连接后,就不需要发送HTTP header就能交换数据。

### WebSocket 入门教程 #### 什么是 WebSocketWebSocket 是一种在单个 TCP 连接上提供全双工通信信道的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求。这使得实时应用成为可能,比如聊天室、股票行情更新和多人游戏等[^1]。 #### 创建 WebSocket 对象 要建立 WebSocket 连接,可以使用 JavaScript 中的 `new WebSocket()` 方法: ```javascript var Socket = new WebSocket(url, [protocol]); ``` 这里的 `url` 参数指定了 WebSocket 服务端地址;可选参数 `[protocol]` 可以指定子协议名称列表,以便于更精确地定义会话类型[^3]。 #### 握手过程 当浏览器尝试建立 WebSocket 连接时,在 TCP 三次握手完成后,先通过 HTTP 协议发送一次特殊形式的消息给服务器。该消息包含了特定头部字段,如 `Connection: Upgrade`, `Upgrade: WebSocket` 和 `Sec-WebSocket-Key:` 等,表明这是一个升级为 WebSocket 的请求[^4]。 一旦成功建立了 WebSocket 链接,则可以在两者之间自由传输二进制或文本格式的数据包直到任意一方决定断开链接为止。 #### 使用 Python 构建 WebSocket 客户端 对于开发者来说,除了前端实现外,还可以利用多种编程语言构建 WebSocket 客户端。例如,在 Python 中可以通过安装第三方库 `websockets` 来轻松创建一个简单的 WebSocket 客户端程序[^2]: ```python import asyncio import websockets async def hello(): uri = "ws://localhost:8765" async with websockets.connect(uri) as websocket: await websocket.send("Hello world!") response = await websocket.recv() print(response) if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(hello()) ``` 这段代码展示了如何异步地连接WebSocket 服务器并交换一条问候语信息。 #### 实际应用场景中的 WebSocket 在一个实际项目里,WebSocket 不仅限于简单的字符串交流。它可以被集成到复杂的业务逻辑当中去处理更加丰富的功能需求。例如 Spring Boot 提供了一套完整的解决方案支持 WebSocket 技术的应用开发[^5]。 考虑这样一个场景:网站管理员想要发布一则最新通知给所有在线用户而不必让他们手动刷新页面获取新内容。这时就可以借助 WebSocket 实现即时通讯机制——即每当有新的公告产生时立即推送给每一个已订阅此频道的人群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值