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

网站小游戏怎么做的建设工程施工合同范本哪个网站

网站小游戏怎么做的,建设工程施工合同范本哪个网站,网页源代码视频下载链接,阿里云 wordpress 插件文章目录 前端实现对话流问题总结流式数据传输问题后台Response Headers问题大量数据分段接收问题多个流时间戳(Time)相同导致被合并的问题 中止对话问题复制问题部署上线问题(Nginx缓冲导致) 前端实现对话流问题总结 流式数据传…

文章目录

  • 前端实现对话流问题总结
      • 流式数据传输问题
        • 后台Response Headers问题
        • 大量数据分段接收问题
        • 多个流时间戳(Time)相同导致被合并的问题
      • 中止对话问题
      • 复制问题
      • 部署上线问题(Nginx缓冲导致)

前端实现对话流问题总结

流式数据传输问题

后台逻辑为一个模块的一大段数据返回一个流,例如一些表格信息、图表信息等都是一个流返回所有数据

后台Response Headers问题

起初后台设置的相应头为application/stream+json这是一种非标准的流式传输格式,导致控制台无法使用EventStream进行调试,不方便定位问题,后续修改为text/event-stream(被大多数现代浏览器原生支持)实现
请添加图片描述

大量数据分段接收问题
  • application/stream+json

同时由于每次流传输的是完整一个模块的内容,数据量较大,客户端接收时会切分成多次读取(注:服务端其实是完整发送的),那么在使用application/stream+json不会对一个完整的流进行标注,例如返回的数据可能为

// 完整数据
"{"type":"update","value":1},{"type":"update","value":2},{"type":"update","value":3}"
// 实际接收
- fisrt stream
"{"type":"update","value":1},{"ty
- second stream
pe":"update","value":2},{"type":"update","value":3}"

那么要如何判断我多次接收到的数据是不是一个完整模块,这里我采取的方案为判断是否返回了一个完整的JSON,当然性能略差

const reader = res.getReader()
let stringData = ''
reader.read().then(function processText({ done, value }) {if(done) {return}const text = new TextDecoder().decode(value)if(text) {stringData += textif(isValidJSON(stringData)) {console.log(JSON.parse(stringData)) // Do somethingstringData = ''}}return reader.read().then(processText)
}
function isValidJSON(data) {try {JSON.parse(data);return true;  // 如果解析成功,说明是有效的JSON} catch (e) {return false; // 如果解析失败,说明不是有效的JSON}
}
  • text/event-stream

使用text/event-stream格式,情况就会好很多,因为服务端发送的一个完整模块会在开头使用data:标注,不需要再额外判断

// 完整数据
"data:{"type":"update","value":1},{"type":"update","value":2},{"type":"update","value":3}"
// 实际接收
- fisrt stream
"data:{"type":"update","value":1},{"ty
- second stream
pe":"update","value":2},{"type":"update","value":3}"

实现可以变换为

const reader = res.getReader()
let stringData = ''
reader.read().then(function processText({ done, value }) {if(done) {return}const text = new TextDecoder().decode(value)if(text) {// 一个data:到下一个data:之间的值为一个完整JSONif(text.startsWith('data:')) {if(stringData) {console.log(JSON.parse(stringData)) // Do something}stringData = decodedChunk.substring(5)} else {jsonString += decodedChunk}}return reader.read().then(processText)
}
多个流时间戳(Time)相同导致被合并的问题

在联调接口时发现有多个流合并在同一次返回中,观察接口EventStream发现当数据生成非常快时(一般是命中了大模型的缓存),流式数据的时间戳会完全相同,导致数据会在统一批次返回,形成这种返回结果。

- fisrt stream
"data:{"type":"update","value":1},{"type":"update","value":2}"
"data:{"type":"update","value":3}"

请添加图片描述
这里的处理方式为让后端在发送每条数据时添加一个毫秒级的延迟,确保每个流的时间戳不同

中止对话问题

其实没什么难度,就是使用reader.cancel(),但有一个点要注意,创建reader的前提是已经建立好了连接,因此在建立连接的这段过程要么不显示中止按钮、要么实现取消发送,我这里采用不显示中止按钮

// 流式传输返回请求头即为建立连接
async function send(){let isConnected = falseawait getData()isConnected = true
}
// 在发送完成的done状态也修改为isConnected为false表示结束

复制问题

实现复制功能要注意的一点是,因为浏览器的安全策略,navigator.clipboard需要在https或本地调试这种安全上下文中才有,所以我们的服务如果采用的是http协议,要实现适配,适配方案为创建DOM,获取DOM内容

const giveCopy = (text) => {if (text) {if (navigator.clipboard && window.isSecureContext) {console.log('复制成功')return navigator.clipboard.writeText(text)} else {let textArea = document.createElement('textarea')textArea.value = texttextArea.style.position = 'absolute'textArea.style.opacity = 0textArea.style.left = '-9999px'textArea.style.top = '-9999px'document.body.appendChild(textArea)textArea.focus()textArea.select()return new Promise((res, rej) => {document.execCommand('copy') ? res(console.log('复制成功')) : rej()textArea.remove()})}}
}

部署上线问题(Nginx缓冲导致)

流式传输为Server-Sent Events (SSE) ,当采用Nginx代理时,由于其默认的缓存和缓冲机制,会出现无法正常流式返回数据的问题

在一些浏览器可能会返回

Request with the provided ID has already finished loading

因此需要配置Nginx

proxy_buffering off; # 禁用Nginx缓冲
proxy_cache off; # 禁用缓存

文章转载自:

http://dyQNhBEd.zxwqt.cn
http://w3x117Vv.zxwqt.cn
http://DraXIzyw.zxwqt.cn
http://vzoP9Ohg.zxwqt.cn
http://EhAHbyp6.zxwqt.cn
http://hjERUBhz.zxwqt.cn
http://8vVsn3B6.zxwqt.cn
http://AraZKErD.zxwqt.cn
http://O8iYiwxo.zxwqt.cn
http://hVn9ZXo4.zxwqt.cn
http://c5tcb8AN.zxwqt.cn
http://ww8jYPz0.zxwqt.cn
http://F8L5z6sj.zxwqt.cn
http://HSqKgcuM.zxwqt.cn
http://Fz783Qk0.zxwqt.cn
http://rUIwphgn.zxwqt.cn
http://Phhqo9G0.zxwqt.cn
http://iaGTmX3h.zxwqt.cn
http://epsmqpEr.zxwqt.cn
http://66YXyl62.zxwqt.cn
http://x7liCZM3.zxwqt.cn
http://4R8dPpT3.zxwqt.cn
http://1ACdy1Zg.zxwqt.cn
http://2fZ7N6xH.zxwqt.cn
http://5BdSBmDC.zxwqt.cn
http://RYxwUe05.zxwqt.cn
http://3aefIRiQ.zxwqt.cn
http://Vs5CszQa.zxwqt.cn
http://Wf0NY19A.zxwqt.cn
http://aFvTSDfE.zxwqt.cn
http://www.dtcms.com/wzjs/677721.html

相关文章:

  • 网站首页页脚设计php创建网页
  • 网站开通会员怎么开发pageadmin做的网站的域名必须要备案吗
  • 深圳官方网站新闻网站域名属于哪里管
  • 北京网站建设公司资讯成都房地产官网
  • 安阳网站建设哪家好开发网站定制
  • 如何在工商局网站做企业年报视觉传达设计挣钱吗
  • 北京知名网站建设公司各大网络平台的推广内容和方法
  • 让人做网站需要注意哪些问题网络工程师需要什么证书
  • 怎么找到网站后台wordpress插件盗版
  • 四川建设厅网站查询公司企业黄页
  • 梧州市网站建设17网站一起做网店潮汕
  • 做充值网站网站开发与服务器交互
  • 中国保险行业协会网站网站开发学的啥
  • 浙江城乡与住房建设部网站平面设计图片 作品集
  • 国内设计师网站网站建设汇报书 ppt
  • 如何建网站遂宁科技魏
  • 画室网站模板加油站网站建设
  • 空调维修自己做网站软件外包专业
  • 网站推广渠道特点广东网站建设的
  • 重庆巫山网站设计哪家专业网站开发的可行性研究报告
  • 查看网站cms苏州公司建设网站
  • 泉州网站建设兼职厦门海绵城市建设官方网站
  • 泉州网站制作建设北京58网站建设
  • 那个网站做网编好官方网站建设项目询价
  • 乌海网站建设公司徐州建设工程交易网张周
  • 京东电子商务网站建设网页设计站
  • 人与马做的网站在线海报设计
  • 哪有免费的网站广州海珠做网站的公司
  • 南宁建设厅网站分销小程序开发研发公司
  • 中国域名网站三明网站设计