实现SSE的textevent-stream是什么?和applicationoctet-stream有什么区别?

news2024/12/29 17:41:30

WEB通讯技术。前端实现SSE长连接,nodejs+express搭建简单服务器,进行接口调试,通过curl请求数据

点击上面的地址是可以了解轮询和长轮询以及websocket等通信模式,一些基础概念和速成技能,这篇来接着详细聊聊text/event-stream以及applicationoctet-stream 是如何实现服务端数据实时推送。


text/event-stream是什么?

在这里插入图片描述

text/event-stream是一种用于服务器向客户端推送消息、事件和通知的数据格式,属于HTML5的一部分。text/event-stream将消息视为一系列流事件,以文本形式发送。该格式适用于实现服务器发送事件 (SSE) 的应用程序,其中某些服务器可以在客户端通信时单向推送数据。

工作原理:

客户端通过发送HTTP请求到服务器,请求获取特定资源的SSE流。当服务器有新的事件可以推送时,将推送到SSE流中。客户端会注意到流的变化,并从流中读取推送的事件。客户端可以使用JavaScript EventSource对象来消费推送的事件数据。
text/event-stream 能做什么?使用场景是什么?

主要用于实时应用程序的开发,如在线游戏、社交媒体、消息推送等场景。


1.实时游戏

  • text/event-stream是实时游戏和在线游戏交互中常用的技术。服务器可以使用它向客户端实时推送有关游戏中其他玩家的数据,以便玩家可以及时跟踪游戏中发生的事情。

2.社交网络

  • 社交媒体网站使用text/event-stream的主要原因是实时通知其用户应用程序中新事件的发生。如果用户在聊天或其他活动中收到新消息或其他实时更新,则 text/event-stream可以在不需要用户刷新页面的情况下通知它们。

3.处理大量数据

  • text/event-stream是处理大量数据的一种流行的技术,例如高解析度视频流或音频流。使用它可以轻松地传输大量的数据,从而提高应用程序的响应能力。

4.消息推送

  • 是一种从服务器向客户端实时推送数据的通信协议。它允许服务器在任何时候向客户端发送数据,而不需要客户端发起请求。SSE建立在标准的HTTP协议之上,使用单向连接,通常基于文本的数据传输。

怎么使用 text/event-stream?

text/event-stream可以通过以下几个步骤来使用:

服务器端设置SSE

在服务器端,您需要向客户端提供一个SSE流。您可以使用Node.js编写服务器,并使用特定的npm包将SSE流添加到您的服务器中。

建立SSE连接

在客户端,您需要建立与SSE流的连接。您可以使用JavaScript中的EventSource对象来实现此操作。使用该对象可以连接到SSE流,并订阅来自服务器的事件信息。您还可以在EventSource对象中添加回调处理程序,以便处理由服务器推送的事件。

推送事件

在服务器端,您需要将要推送的事件写入您的SSE流中。您可以使用res.write()方法并将事件作为文本字符串添加到SSE流中。事件字符串应该遵循text/event-stream数据格式的结构。

关闭SSE连接

最后,在页面或会话结束时,请确保关闭SSE连接。您可以使用JavaScript中的EventSource对象的close()方法来实现此操作。

具体代码可以看我上面的文章操作

Server-Sent Events(SSE)具有以下几个优点:

  1. 实时性:SSE允许服务器在任何时候向客户端发送数据,从而实现实时的数据更新。这对于需要及时获取信息的应用程序非常有用,如聊天应用、实时通知、在线游戏等。

  2. 简单易用:SSE使用标准的HTTP协议,客户端可以使用JavaScript中的EventSource对象轻松地建立连接和接收数据。相比于其他实时通信技术,SSE的实现和使用都相对简单。

  3. 节省带宽和服务器资源:SSE采用了单向连接,服务器可以主动向客户端推送数据,而不需要客户端发起请求。可以消除像轮询这样的开销大的技术。减少了不必要的HTTP请求,节省了带宽和服务器资源。可以更好地使用资源,因为它可以一次连接多个资源。

  4. 自动重连:如果连接断开,SSE会自动尝试重新建立连接,确保持久的通信连接。我这里利用的是库(event-source-polyfill)如果这个see服务端没有数据返回,就会自动断开重连No activity within 45000 milliseconds. 0 chars received. Reconnecting.在45000毫秒内没有活动。收到0个字符。重新连接。

  5. 支持事件类型:SSE允许服务器发送不同类型的事件,客户端可以根据事件类型来处理不同的数据。这提供了更大的灵活性,允许开发者设计多样化的实时应用。

  6. 跨域支持:SSE支持跨域通信,允许不同域的服务器与客户端进行实时通信,这在构建分布式系统和跨域应用中非常有用。

  7. 不依赖插件或框架:SSE是HTML5规范的一部分,不需要额外的插件或框架,因此可以广泛地在现代浏览器中使用。

尽管SSE有这些优点,但也有一些限制。例如,SSE只支持文本数据传输,不适用于大规模数据的传输。对于需要双向通信的应用,WebSocket可能更合适。根据具体的应用场景,可以选择使用不同的实时通信技术。


application/octet-stream?

application/octet-stream 是 MIME 中的一种。
在这里插入图片描述

MIME 的独立类型有如下几种:

text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
 …
类型描述示例
text表明文件是普通文本,理论上是人类可读text/plain, text/html, text/css, text/javascript
image表明是某种图像。不包括视频,但是动态图(比如动态 gif)也使用 image 类型
audio表明是某种音频文件audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video表明是某种视频文件video/webm, video/ogg
application表明是某种二进制数据application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf

二进制文件没有特定或已知的 subtype,即使用 application/octet-stream。


application/octet-stream 是HTTP头中的一种Content-Type(内容类型)标识,用于指示响应的主体部分包含的数据是以二进制流的形式传输的,而不是文本或其他特定格式的数据。这个标识通常用于指示服务器发送的数据是未经处理的原始字节流,可以是任何类型的数据,如图像、音频、视频、压缩文件等。

具体来说,application/octet-stream 的特点包括:

  1. 二进制数据:它表示响应主体包含的是二进制数据,而不是文本。这意味着接收方不应该尝试解释或渲染这些数据,而是应该以原始字节流的形式处理。

  2. 通用性:由于它是一个通用的二进制流标识,因此可以用于传输任何类型的二进制数据。这使得它非常灵活,适用于多种用途。

  3. 不可读:由于是二进制数据,因此无法通过普通文本编辑器或浏览器直接查看或呈现。它可能包含非常复杂的数据结构,而不仅仅是文本。

  4. 下载提示:当浏览器或客户端接收到application/octet-stream类型的响应时,通常会触发文件下载的行为,提示用户将数据保存到本地文件系统中,而不是在浏览器中直接打开。即这个使用场景一般伴随着下载。

总之,application/octet-stream 是一种通用的HTTP头,用于传输未经处理的二进制数据,这在文件下载和传输不同类型的文件时非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电影《孤注一掷》引发观众思考网络安全

近日上映的电影《孤注一掷》深刻地揭示了境外网络诈骗的全产业链,上万起真实诈骗案例为素材,让观众近距离感受这一犯罪行为的阴谋与可怕。影片呈现了从诈骗策划到资金流转的每一个环节,引发了观众的强烈好奇和观看欲望。这种真实性让观众对网…

MITSUBISHI A1SJ51T64电源单元

电源供应:A1SJ51T64 电源单元通常用于为MITSUBISHI PLC系统提供稳定的电源,以确保系统正常运行。 电源输入:它通常支持广泛的电源输入范围,以适应不同地区的电源标准。 电源输出:A1SJ51T64 电源单元通常提供多个电源…

【C++基础】6、常量

文章目录 【 1、常量的分类 】1.1 整型常量1.2 浮点常量1.3 字符常量1.4 字符串常量1.5 布尔常量 【 2、常量的定义 】2.1 #define 预处理器2.2 const 关键字 常量 是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数…

22行 手写实现promise

面试题 const MyPromise()>{}const myPromise new MyPromise((resolve) > {setTimeout(() > { resolve(hellow world) }, 2000)})myPromise.then((res) > {console.log(res)return "00"}) 手写promise,面试了一个面试题,promise…

【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语、矩阵表示)

文章目录 引言一、图与网络的基本知识1.1 图与网络的基本概念1.1.1 图的定义1.1.2 图中相关术语1.1.3 一些特殊图类1.1.4 图的运算 1.2 图的矩阵表示1.2.1 邻接矩阵1.2.2 可达矩阵1.2.3 关联矩阵1.2.4 权矩阵 写在最后 引言 按照正常进度应该学习动态规划了,但我想…

Java/Lombok Slf4j日志配置输出到文件中

1、概述 新项目需要增加日志需求,所以网上找了下日志配置,需求是将日志保存到指定文件中。网上找了下文章,发现没有特别完整的文章,下面自己整理下。 1、Java日志概述 对于一个应用程序来说日志记录是必不可少的一部分。线上问题…

每日刷题(回溯法经典问题之子集)

食用指南:本文为作者刷题中认为有必要记录的题目 前置知识:回溯法经典问题之组合 ♈️今日夜电波:想着你—郭顶 1:09 ━━━━━━️💟──────── 4:15 …

Java“牵手”微店商品列表数据,关键词搜索微店商品数据接口,微店API申请指南

微店商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取微店商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问微店商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

电子元器件采购中的供应链透明度

在电子元器件采购中,供应链透明度是一个至关重要的因素。它指的是能够清晰、实时地了解整个供应链的运作和流程,以及相关的信息和数据。供应链透明度在采购中具有多方面的优势和重要性,包括以下方面: 库存管理: 透明的…

『C语言进阶』指针进阶(一)

🔥博客主页: 小羊失眠啦 🔖系列专栏: C语言 🌥️每日语录:无论你怎么选,都难免会有遗憾。 ❤️感谢大家点赞👍收藏⭐评论✍️ 前言 在C语言初阶中,我们对指针有了一定的…

交叉编译嵌入式linux平台的gdb工具

目录 前期准备: 开始编译: 配置编译环境: 配置交叉编译工具链: 创建交叉编译产物的目录: termcap: ncurses: gmp: gdb: 编译产物: 前期准备&#x…

IT设备监控软件有哪些功能

IT设备监控软件通常可以实现以下功能:  设备状态监控:可以实时监测IT设备的运行状态,如设备的温度、湿度、风扇转速等,以及设备的开机、关机、重启等事件。  性能指标监控:可以监测IT设备的各项性能指标&#xff0…

rtthread下spi device架构MCP25625驱动

1.CAN驱动架构 由于采用了RTT的spi device架构,不能再随心所遇的编写CAN驱动 了,之前内核虽然采用了RTT内核,但是驱动并没有严格严格按RTT推荐的架构来做,这次不同了,上次是因为4个MCP25625挂在了4路独立的SPI总线上&…

前端(十六)——Web应用的安全性研究

🙂博主:小猫娃来啦 🙂文章核心:Web应用的安全性研究 文章目录 概述常见前端安全漏洞XSS(跨站脚本攻击)CSRF(跨站请求伪造) 点击劫持安全性验证与授权用户身份验证授权与权限管理 安全…

“搭载超快闪充、续航自由、天玑8200性能” iQOO Z8系列发布

近日,“天玑 8200 性能小超人”iQOO Z8系列正式发布,包括iQOO Z8和iQOO Z8x两款产品,首销售价1199元起。 “天玑 8200 性能小超人”iQOO Z8倾力打造“最佳千元性能机”:搭载具备巅峰性能的天玑 8200 ,携手满血版LPDDR…

熵 | 无线通信知识

文章目录 一、信息论(熵、联合熵、条件熵)二、Bernoulli熵三、联合熵和条件熵四、互信息五、相对熵(KL距离)常需要的不等式公式 一、信息论(熵、联合熵、条件熵) 熵定义: H ( X ) E [ − l o g 2 p ( x ) ] − ∑ x…

【算法|链表】移除链表元素

算法|链表-移除链表元素 关于链表的介绍以及相关实现操作,见单链表,双链表 leetcode 203 移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xff1…

Unity3D之动态生成指定数量带间隔的地面

文章目录 准备代码实现实现效果 准备 空物体生成脚本地面预制体 代码实现 using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine;public class CreateGround : MonoBehaviour {[SerializeField]public i…

多功能透明屏,在智能家居领域中,有哪些功能特点?显示、连接

多功能透明屏是一种新型的显示技术,它能够在透明的表面上显示图像和视频,并且具有多种功能。 这种屏幕可以应用于各种领域,如商业广告、智能家居、教育等,为用户提供更加便捷和多样化的体验。 首先,多功能透明屏可以…

NIFI关于Parameter Contexts的使用

说明 nifi版本:1.23.2(docker镜像) 作用 Parameter Contexts(参数上下文):参数上下文由 NiFi 实例全局定义/访问。访问策略可以应用于参数上下文,以确定哪些用户可以创建它们。创建后&#x…