前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【总结】1892- 理解 WebSocket 和 SSE

【总结】1892- 理解 WebSocket 和 SSE

作者头像
pingan8787
发布2023-12-13 12:17:19
3150
发布2023-12-13 12:17:19
举报
文章被收录于专栏:前端自习课前端自习课

在 Web 应用中实现实时通信是一个常见需求。WebSocket 和 Server-Sent Events (SSE) 是实现这一目标的两种关键技术。本文将更深入地探讨这两种技术,并提供一些实际的使用示例。

WebSocket:全双工通信的实现

WebSocket 允许在单个 TCP 连接上进行「全双工通信」,适用于需要高频双向数据交换的应用。

工作原理

  • 「握手阶段」:通过发送一个包含 Upgrade: websocket 头的 HTTP 请求来初始化 WebSocket 连接。服务器响应 101 Switching Protocols 状态码,确认升级。
  • 「数据传输」:连接建立后,客户端和服务器可以自由地发送和接收数据。

使用示例

  • 「聊天应用」:使用 WebSocket 实现一个基本的聊天应用,能够实时发送和接收消息。
  • 「股票行情应用」:实时接收和展示股票市场的价格变动。

实现代码示例:

代码语言:javascript
复制
// 创建 WebSocket 连接
const socket = new WebSocket("ws://www.example.com/socketserver");

// 连接建立时的处理
socket.onopen = function (event) {
  // 发送消息
  socket.send("Hello, Server!");
};

// 接收消息
socket.onmessage = function (event) {
  console.log("Received message:", event.data);
};

SSE:简化的单向数据流

SSE (Server-Sent Events) 是一种基于 HTTP 的技术,允许「服务器向客户端单向发送数据流」,适用于不需要客户端响应的场景。

工作原理

  • 「建立连接」:客户端发起一个 HTTP 请求,服务器响应并保持该连接打开。
  • 「发送数据」:服务器可以随时通过这个连接向客户端发送消息。

EventSource 介绍

EventSource 是浏览器提供的一个接口,允许你轻松接收来自服务器的 SSE 消息流。

  • 创建 EventSource 实例
  • 要使用 SSE,你需要创建一个指向服务器端点的 EventSource 实例。
代码语言:javascript
复制
const eventSource = new EventSource("http://example.com/sse");
  • 接收数据

当服务器发送消息时,可以通过监听 onmessage 事件来处理这些数据。

代码语言:javascript
复制
eventSource.onmessage = function (event) {
  console.log("Received message:", event.data);
};
  • 关闭连接

如果你想手动关闭连接,可以调用 close 方法。

代码语言:javascript
复制
eventSource.close();

使用示例

  • 新闻推送服务:自动更新最新新闻。
  • 实时通知系统:如系统状态更新通知。

WebSocket 与 SSE 选择

  • 「通信方式」:WebSocket 提供双向通信,适用于需要客户端和服务器间频繁交互的应用;SSE 仅支持从服务器到客户端的单向通信,适用于更新频率较低的场景。
  • 「支持和兼容性」:WebSocket 需要特定的服务器和客户端支持;SSE 更容易集成到现有 HTTP 基础设施中。
  • 「适用场景」:WebSocket 适合聊天应用、在线游戏等;SSE 适合新闻推送、实时通知等应用。

总结

WebSocket 和 SSE 都是实现 Web 应用中实时通信的强大工具。它们各自有不同的优势和适用场景。理解这两种技术的工作原理、EventSource 的使用方法及其实际应用示例,可以帮助开发人员为他们的项目选择最适合的实时通信解决方案。

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端自习课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebSocket:全双工通信的实现
    • 工作原理
      • 使用示例
      • SSE:简化的单向数据流
        • 工作原理
          • EventSource 介绍
            • 使用示例
            • WebSocket 与 SSE 选择
            • 总结
            相关产品与服务
            腾讯云微搭低代码
            微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。 支持打通企业内部数据,轻松实现企业微信管理、工作流、消息推送、用户权限等能力,实现企业内部系统管理。 连接微信生态,和微信支付、腾讯会议,腾讯文档等腾讯 SaaS 产品深度打通,支持原生小程序,助力企业内外部运营协同和营销管理。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档