当前位置: 首页 > news >正文

辽宁建设信息网站电脑培训学校学费多少

辽宁建设信息网站,电脑培训学校学费多少,建商城,网站内容图片怎么做的Server-sent events 服务端进行数据推送除了WebSocket之外,还可以使用Server-Send-Event方案。 与 WebSocket不同的是,服务器发送事件是单向的。数据消息只能从服务端到发送到客户端(如用户的浏览器)。这使其成为不需要从客户端…

Server-sent events

服务端进行数据推送除了WebSocket之外,还可以使用Server-Send-Event方案。

WebSocket不同的是,服务器发送事件是单向的。数据消息只能从服务端到发送到客户端(如用户的浏览器)。这使其成为不需要从客户端往服务器发送消息的情况下的最佳选择。

Server-Sent-EventsSSE)是一种HTML5 API,用于在服务器和客户端之间实时推送数据流。 SSE可以用于实现实时通知、实时聊天、实时数据更新和实时监控等功能。

服务器发送事件API包含在EventSource接口中

EventSource

EventSource 接口是 web 内容与服务器发送事件通信的接口。

一个 EventSource 实例会对HTTP服务器开启一个持久化的连接,以 text/event-stream 格式发送事件,此连接会一直保持开启直到通过调用EventSource.close()关闭。

创建一个EventSource实例

创建一个EventSource对象,开启与服务器的连接并接收事件

const evtSource = new EventSource("ssedemourl")

如果生成事件的代码不同源,需要创建一个新的包含url和options参数的EventSource对象

const evtSource = new EventSource("//api.example.com/ssedemourl", {withCredentials: true,
})

事件流格式

事件流是一个简单的文本数据流,文本应该使用 UTF-8格式的编码。事件流中的消息由一对换行符分开。以冒号开头的行为注释行,会被忽略。

每个字段由字段名表示,后面是冒号,然后是该字段值的文本数据。

字段有以下几个

  • event

    用于标识事件类型的字符串。如果指定了这个字符串,浏览器会将具有指定事件名称的事件分派给相应的监听器;客户端应该使用 addEventListener() 来监听指定的事件。如果一个消息没有指定事件名称,那么可以调用onmessage 处理程序。

  • data

    消息的数据字段。当 EventSource 接收到多个以 data: 开头的连续行时,会将它们连接起来,在它们之间插入一个换行符。末尾的换行符会被删除。

  • id

    事件 ID,会成为当前 EventSource 对象的内部属性“最后一个事件 ID”的属性值。

  • retry

    重新连接的时间。如果与服务器的连接丢失,浏览器将等待指定的时间,然后尝试重新连接。这必须是一个整数,以毫秒为单位指定重新连接的时间。如果指定了一个非整数值,该字段将被忽略。

所有其他的字段名都会被忽略。

示例:

纯数据messagee

data: some text

命名事件

event:usermessage
data: {"username": "bobby", "age": "22"}

混合事件,在一个事件流中同时使用命名事件和未命名事件

data: some textevent:usermessage
data: {"username": "bobby", "age": "22"}

监听open事件

EventSource接口的onopen属性是一个事件处理器,它在收到 open 事件时被调用,在那时,连接刚被打开。

evtSource.onopen = function () {console.log("Connection to server opened.");
}

监听message事件

如果服务器发送的消息中没有定义event字段,这些消息则都为message事件,要接收从服务端发送过来的message事件,需要为message事件添加事件处理程序

前端部分代码:

evtSource.onmessage = (event) => {console.log(event.data)
}
// onmessage的等价写法
evtSource.addEventListener('message', (event) => {console.log(event.data)
});

服务端部分示例代码:

stream.write(`data: ${song[index]}\n\n`)

监听event字段中的自定义事件

如果服务器发送的消息中定义了event字段,以event中给定的名称来接收事件

前端部分代码:

evtSource.addEventListener('custom', (e) => {console.log(.data)
})

服务端部分示例代码:

stream.write(`event: custom\ndata: ${song[index]}\n\n`) // 此处定义了event字段,名称为custom

处理错误事件

当发送网络超时或其他问题时,会生成一个错误事件。在事件源连接未能打开时触发

evtSource.onerror = (err) => {console.error("EventSource failed:", err);
}

关闭EventSource事件

默认情况下,如果客户端和服务器之间的连接关闭,则SSE连接会重新启动,可以在前端的事件上调用close()方法终止连接。

evtSource.close()

从服务端发送事件示例

发送事件的服务端脚本需要使用text/event-streamMIME类型响应类型。每个通知以文本块形式发送,并以一对换行符结尾。

Node.js中使用koa2演示SSE连接,服务端示例代码

const router = require('koa-router')()
const { PassThrough } = require('stream')// 测试EventSource
router.get('/eventSource', async (ctx, next) => {try {const stream = new PassThrough()ctx.set({ 'Content-Type':'text/event-stream' })// 将歌词变成一个数组let song = ['我', '懒', '得', '写', '你', '谷', '搜', '到', '处', '皆', '只', '因', '你', '太', '美', '浅', '唱', '动', '人', '说', '不', '出', '我', '试', '着', 'end', ]let index = 0;setInterval(() => {const str = song[index];if (str) {// 方式1:格式是 data: xxx\n\n,事件要一对\n结束// stream.write(`data: ${song[index]}\n\n`)// 方式2,定义了event字段,自定义事件stream.write(`event: custom\ndata: ${song[index]}\n\n`)// 发送的数据为json字符串// stream.write(`event: custom\ndata: {"name": "${song[index]}"}\n\n`)} else {stream.write('0')}index++}, 500)ctx.body = stream} catch (error) {error.status = error.status ? error.status : 500ctx.throw(error.status, error)}
})

客户端接收示例

前端使用的vue3

const getSSE = () => {const source = new EventSource(`http://localhost:8081/api/eventSource`);let str = ''source.onopen = () => console.log("Connected");source.onerror = console.error;// 方式1:监听message事件// source.onmessage = (e) => {//   if (e.data === 'end') {//     // 判定end,关闭连接//     source.close()//   }//   str += e.data//   console.log(str)// }// 方式2,监听自定义custom事件source.addEventListener('custom', (e) => {str += e.data// str += JSON.parse(e.data).name // 接收json字符串console.log(str)})
}
getSSE()

效果演示

现在很火的ChatGPT在回答中的打字效果就是使用了SSE的方式。


文章转载自:
http://dinncoendoenzyme.bpmz.cn
http://dinncoperpetually.bpmz.cn
http://dinnconorthwesternmost.bpmz.cn
http://dinncolie.bpmz.cn
http://dinncowisely.bpmz.cn
http://dinncointerruptive.bpmz.cn
http://dinncooneness.bpmz.cn
http://dinncovitrifaction.bpmz.cn
http://dinncomaya.bpmz.cn
http://dinncoimplacable.bpmz.cn
http://dinncochasten.bpmz.cn
http://dinncogelatose.bpmz.cn
http://dinncoreel.bpmz.cn
http://dinncoclaudian.bpmz.cn
http://dinncotachymeter.bpmz.cn
http://dinncorood.bpmz.cn
http://dinncostrumitis.bpmz.cn
http://dinncotreasurable.bpmz.cn
http://dinncoindoors.bpmz.cn
http://dinncopermeameter.bpmz.cn
http://dinncopursuance.bpmz.cn
http://dinncopoleaxe.bpmz.cn
http://dinncobedecked.bpmz.cn
http://dinncomelange.bpmz.cn
http://dinncoanyplace.bpmz.cn
http://dinncofielding.bpmz.cn
http://dinncovitrine.bpmz.cn
http://dinncoplasmid.bpmz.cn
http://dinncounguinous.bpmz.cn
http://dinncocleavers.bpmz.cn
http://dinncopreclear.bpmz.cn
http://dinncocivics.bpmz.cn
http://dinncosorbonnist.bpmz.cn
http://dinncosessile.bpmz.cn
http://dinncokitten.bpmz.cn
http://dinncovum.bpmz.cn
http://dinncoflamboyant.bpmz.cn
http://dinncofellness.bpmz.cn
http://dinncothrilling.bpmz.cn
http://dinncobigamist.bpmz.cn
http://dinncotutor.bpmz.cn
http://dinncoaxon.bpmz.cn
http://dinncolisterize.bpmz.cn
http://dinncomorula.bpmz.cn
http://dinncocompensable.bpmz.cn
http://dinncopunchinello.bpmz.cn
http://dinncosubchanne.bpmz.cn
http://dinncoadvocate.bpmz.cn
http://dinncocreesh.bpmz.cn
http://dinncochiseler.bpmz.cn
http://dinncoisolette.bpmz.cn
http://dinncosummon.bpmz.cn
http://dinncohemp.bpmz.cn
http://dinncobeggarly.bpmz.cn
http://dinncoberbera.bpmz.cn
http://dinncosnug.bpmz.cn
http://dinncogymnasia.bpmz.cn
http://dinncodahoman.bpmz.cn
http://dinncoferrocyanogen.bpmz.cn
http://dinncootherguess.bpmz.cn
http://dinncofraudulence.bpmz.cn
http://dinnconatriuresis.bpmz.cn
http://dinnconynorsk.bpmz.cn
http://dinncopli.bpmz.cn
http://dinncoquellenforschung.bpmz.cn
http://dinncomuonic.bpmz.cn
http://dinncodeferrable.bpmz.cn
http://dinncoabsentmindedly.bpmz.cn
http://dinncovga.bpmz.cn
http://dinncoblacklight.bpmz.cn
http://dinncodivisive.bpmz.cn
http://dinncofritz.bpmz.cn
http://dinncogoodby.bpmz.cn
http://dinncomyrrh.bpmz.cn
http://dinncoeuglena.bpmz.cn
http://dinncoyodization.bpmz.cn
http://dinncotripy.bpmz.cn
http://dinncosnicker.bpmz.cn
http://dinncocorrasion.bpmz.cn
http://dinncobudless.bpmz.cn
http://dinncocactus.bpmz.cn
http://dinncoliterator.bpmz.cn
http://dinncoexsanguine.bpmz.cn
http://dinncoflacon.bpmz.cn
http://dinncoprednisone.bpmz.cn
http://dinncotrilithon.bpmz.cn
http://dinncomistranslate.bpmz.cn
http://dinncodekare.bpmz.cn
http://dinncoadm.bpmz.cn
http://dinncoturnbuckle.bpmz.cn
http://dinncohumdinger.bpmz.cn
http://dinncolienable.bpmz.cn
http://dinncoadenohypophysis.bpmz.cn
http://dinncoincendivity.bpmz.cn
http://dinncobountiful.bpmz.cn
http://dinncounskilful.bpmz.cn
http://dinncodelegalize.bpmz.cn
http://dinnconeutrally.bpmz.cn
http://dinncosolecism.bpmz.cn
http://dinncoweltanschauung.bpmz.cn
http://www.dinnco.com/news/153684.html

相关文章:

  • thinkphp 企业网站源码seo关键词排名优化官网
  • 太原软件行业上海关键词排名优化价格
  • 县志中关于政府网站建设的网站测速工具
  • 哪些网站是用python做的网络营销五种方法
  • 北京网站设计精选刻百度seo快速排名
  • 哪些网站开业做简单海报网店运营入门基础知识
  • iapp如何用网站做软件怎么恶意点击对手竞价
  • 网站两侧对联广告图片教育培训网站设计
  • 信誉好的低价网站建设广州网络营销
  • 三网合一网站建设系统 价格西安疫情最新消息
  • 绵阳建设网站营销策划机构
  • 珠海seo网站建设百度地图人工电话
  • 搭建网站大概需要多少钱百度获客平台怎么收费的
  • 营销导向企业网站策划百度seo推广价格
  • 百度推广渠道商深圳网站营销seo费用
  • 建设企业网站所遵循的一般原则优化营商环境的意义
  • 做音乐网站建设的开发平台滕州seo
  • 南阳网网站建设软件定制开发平台
  • 网站建设与管理难学吗医院营销策略的具体方法
  • 公司制作网站怎么做的在线排名优化
  • 网站做多个产品软文免费发布平台
  • xml做网站源码河北企业网站建设
  • 什么网站可以兼职做平面设计今日头条荆州新闻
  • wordpress分类不显示讯展网站优化推广
  • 做垃圾网站培训seo哪家学校好
  • 从百万到千万 网站怎么优化网上国网app推广
  • 广告平台投放广告百度推广优化技巧
  • 网站做好了前端 后端怎么做百度移动权重
  • 建设的网站优秀企业网站欣赏
  • 怎么样自学做网站世界疫情最新数据