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

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.mzph.cn/news/69923.shtml

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

相关文章

Qt---对话框 事件处理 如何发布自己写的软件

目录 一、对话框 1.1 消息对话框(QMessageBox) 1> 消息对话框提供了一个模态的对话框,用来提示用户信息,或者询问用户问题并得到回答 2> 基于属性版本的API 3> 基于静态成员函数版本 4> 对话框案例 1、ui界面 …

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…

【AIGC专题】Stable Diffusion 从入门到企业级实战0401

一、概述 本章是《Stable Diffusion 从入门到企业级实战》系列的第四部分能力进阶篇《Stable Diffusion ControlNet v1.1 图像精准控制》第01节&#xff0c; 利用Stable Diffusion ControlNet Inpaint模型精准控制图像生成。本部分内容&#xff0c;位于整个Stable Diffusion生…

Ubuntu之apt-get系列--apt-get安装软件的方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--apt-get安装软件的方法/教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Ubuntu使用apt-get安装软件的方法。 安装软件 先更新列表 sudo apt-get update 安装软件 sudo apt-get install <package name>[<version>]…

Android后退堆栈

修改代码 现在的ItemClick使得用户单击其中一个项目时就会跳转&#xff0c;现在要修改其使得在一个小屏幕设备上才会这样做&#xff0c;在一个大屏幕设备上运行用户选择一个训练项目时在右边的片段显示响应的信息。 希望片段处理后退的方式&#xff1a;假设用户在手机上运行这…

【ES6】js中的__proto__和prototype

在JavaScript中&#xff0c;__proto__和prototype都是用于实现对象继承的关键概念。 1、proto __proto__是一个非标准的属性&#xff0c;用于设置或获取一个对象的原型。这个属性提供了直接访问对象内部原型对象的途径。对于浏览器中的宿主对象和大多数对象来说&#xff0c;可…

加强版python连接飞书通知——本地电脑PC端通过网页链接打开本地已安装软件(调用注册表形式,以漏洞扫描工具AppScan为例)

前言 如果你想要通过超链接来打开本地应用,那么你首先你需要将你的应用添入windows注册表中(这样网页就可以通过指定代号来调用程序),由于安全性的原因所以网页无法直接通过输入绝对路径来调用本地文件。 一、通过创建reg文件自动配置注册表 创建文本文档,使用记事本打开…

STM32使用FAT文件系统-常见概念、代码走读

fat文件系统的所有外部接口都在ff.h中 格式化 挂载 使用文件系统的第一步&#xff0c;就是挂载。 函数原型&#xff1a;FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ static FATFS fs; FRESULT fres f_mo…

【爬虫】7.4. 字体反爬案例分析与爬取实战

字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例&#xff0c;该案例将真实的数据隐藏到字体文件里&#xff0c;即使我们获取了页面源代码&#xff0c;也无法直接提取数据的真实值。 1. 案例介绍 案例网…

存储过程报Illegal mix of collations错误的解决方法

CREATE PROCEDURE maxAgeStudent(IN _gender CHAR) BEGINDECLARE maxage INT DEFAULT 0;SELECT max(age) INTO maxage FROM student where gender _gender;SELECT * from student WHERE age maxage and gender _gender; END; 在调用的时候 call maxAgeStudent(1) 产生了报…

SpringCloud入门实战(十五)分布式事务框架Seata简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

qemu/kvm学习笔记

qemu/kvm架构 cpu虚拟化的示例 Reference: kvmtest.c [LWN.net] 主要步骤&#xff1a; QEMU通过/dev/kvm设备文件发起KVM_CREATE_VM ioctl&#xff0c;请求KVM创建一个虚拟机。KVM创建虚拟机相应的结构体&#xff0c;并为QEMU返回一个虚拟机文件描述符QEMU通过虚拟机文件描述…

读懂AUTOSAR,之CAN Driver L-PDU发送和“重入问题”

1. L-PDU发送 L-PDU传输时,Can模块将L-PDU内容ID和数据长度转换为硬件特定格式(如果需要),并触发传输。 [SWS_Can_00059] CAN到内存的数据映射定义为首先发送的CAN数据字节为数组元素0,最后发送的CAN数据字节为数组元素7或63(在CAN FD的情况下)。(SRS_SPAL_12063)[S…

linux 进程管理命令

进程管理命令 查看进程命令 ps命令 显示系统上运行的进程列表 # 查看系统中所有正在运行的系统ps aux# 获取占用内存资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a;ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head# 获取占用CPU资源最多的10个进程&am…

PXE批量装机

目录 前言 一、交互式 &#xff08;一&#xff09;、搭建环境 &#xff08;二&#xff09;、配置dhcp服务 &#xff08;三&#xff09;、FTP服务 &#xff08;四&#xff09;、配置TFTP服务 &#xff08;五&#xff09;、准备pxelinx.0文件、引导文件、内核文件 &#…

Java分别用BIO、NIO实现简单的客户端服务器通信

分别用BIO、NIO实现客户端服务器通信 BIONIONIO演示&#xff08;无Selector&#xff09;NIO演示&#xff08;Selector&#xff09; 前言&#xff1a; Java I/O模型发展以及Netty网络模型的设计思想 BIO Java BIO是Java平台上的BIO&#xff08;Blocking I/O&#xff09;模型&a…

【深入解析spring cloud gateway】02 网关路由断言

一、断言(Predicate)的意义 断言是路由配置的一部分&#xff0c;当断言条件满足&#xff0c;即执行Filter的逻辑&#xff0c;如下例所示 spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path/red/{segment}filters:- AddR…

Kafka3.0.0版本——文件存储机制

这里写木目录标题 一、Topic 数据的存储机制1.1、Topic 数据的存储机制的概述1.2、Topic 数据的存储机制的图解1.3、Topic 数据的存储机制的文件解释 二、Topic数据的存储位置示例 一、Topic 数据的存储机制 1.1、Topic 数据的存储机制的概述 Topic是逻辑上的概念&#xff0c…

ASP.NET Core 中基于 Controller 的 Web API

基于 Controller 的 Web API ASP.NET Wep API 的请求架构 客户端发送Http请求&#xff0c;Contoller响应请求&#xff0c;并从数据库读取数据&#xff0c;序列化数据&#xff0c;然后通过 Http Response返回序列化的数据。 ControllerBase 类 Web API 的所有controllers 一般…