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

网站建设的阶段中山网站建设文化价位

网站建设的阶段,中山网站建设文化价位,wordpress段子模板,河北网站建设收益1. 前言 本篇将结合Promise、WebSocket、EventEmitter和Queue#xff0c;做一次实践#xff1a;用WebSocket来模拟HTTP的功能。先不用关心它的用处#xff0c;就当一次对知识点的整合吧。 2. MockHTTP 方法说明request(params, callback?) 功能#xff1a;发起请求…1. 前言 本篇将结合Promise、WebSocket、EventEmitter和Queue做一次实践用WebSocket来模拟HTTP的功能。先不用关心它的用处就当一次对知识点的整合吧。 2. MockHTTP 方法说明request(params, callback?) 功能发起请求生成uuid标记数据params将回调逻辑once到事件发射器中返回一个Promise对象等待receive触发emit执行回调逻辑 输入 params - 发送给服务端的数据 callback? - 可选采用回调函数方式接收数据 输出Promiseany send(params) 功能将数据推入队列中待loop取出 输入params loop()功能定时从队列队头取出数据发给服务端receive(e) 功能接收响应数据触发事件发射器emit方法 输入e - 事件对象 close()功能关闭WebSocket连接 import EventEmitter from ./EventEmiter; import Queue from ./Queue;export default class MockHTTP {constructor(url) {this.ws new WebSocket(url);this.eventEmitter new EventEmitter();this.queue new Queue();this.ws.onmessage this.receive;}loop() {if(this.queue.size() this.ws.readyState this.ws.OPEN) {// 发起请求const params this.queue.dequeue();this.ws.send(JSON.stringify(params));}requestAnimationFrame(this.loop);}// 接收数据receive(e) {const data e.data;const uuid data.uuid;if(uuid) {this.eventEmitter.emit(uuid);}}send(params) {// 发起的请求放到队列中this.queue.enqueue(params);}// 请求request(params, callback) {return new Promise((resolve, reject) {// 生成uuid用来匹配发起的ws请求 和 ws响应const uuid ${new Date().valueOf()}${Math.round(Math.random() * 1000)};// 将回调函数放入事件发射器this.eventEmitter.once(uuid, (data) {// 采用回调函数接收响应数据if(callback) {callback(data);}// resolveresolve(data);});params.uuid uuid;this.send(params);});}// 关闭websocket连接close() {this.ws.close();} } 注本篇未考虑WebSocket创建失败或连接异常的情况。 3. request执行周期 从第1步发起请求最第8步最终响应经历的过程如下图所示。 其中 第2步订阅和第7步发布是事件发射器EventEmitter的订阅/发布功能第3步入队和第4步出队是队列Queue的入队/出队功能第5步发送消息和第6步监听响应是WebSocket的发送send/接收onmessage的功能第1步发起请求和第8步执行回调是用于构建Promise的函数的功能第8步会使得Promise状态从pending转成fulfilled。 4. Demo源码 const HTTP new MockHTTP(http://localhost:8080/ws); const params {method: add,data: {name: 小明,sex: 男,age: 13} };HTTP.request(params).then((data) {console.dir(data); }); 有兴趣的同学可参考我的博文。 【ECMAScript】自己动手实现ES6的Promise-CSDN博客 【网络协议】WebSocket知识点梳理和总结-CSDN博客 【ECMAScript】基于Map和Set手写一个简单EventEmitter实现事件的发布和订阅-CSDN博客 【数据结构】自己动手使用JavaScript实现栈、队列、双端队列第一篇-CSDN博客 注以上如有不合理之处还请帮忙指出大家一起交流学习~
http://www.hkea.cn/news/14356977/

相关文章:

  • 欧洲手表网站什么是全网营销推广
  • 东莞企业网站设计排名单位网站建设情况总结
  • mysql asp网站广州58同城招聘网最新招聘
  • 做色流网站要注意什么地方网站上传后如何设置首页
  • 公司网站建设优帮云怎么用wordpress搭建网站
  • 汕头网站制作后缀贵阳市 网站建设
  • 成都网站建设空间wordpress 关键词堆砌
  • 优秀国外设计网站app做微信的网站叫什么名字
  • 建设北京公司网站3 阐述网站建设的步骤过程 9分
  • 信用门户网站建设方案推销产品什么网站好
  • 萧山区建设工程质量监督站网站旅游外贸网站建设推广
  • 旅游网站建站目的wordpress ssh
  • 罗岗网站建设河北pc端网站开发
  • app界面设计网站济宁网站运营
  • 网络营销属于哪个专业成都seo服务
  • 宁波网站建设明细报价成都网站建设优化公司
  • 私人彩票网站做几年牢河北城乡建设厅网站显示不全
  • 做量化投资网站wordpress 图片模糊
  • 网站布局模板网站如何提交关键词
  • 手机网站 设计图衡阳网站
  • 山东建设机械协会官方网站百度推广包做网站吗
  • 丰台网站建设报价微信公众号(网站建设)合同
  • 吉林省可信网站认证牌匾做网站前的准备
  • 网站的设计方法有哪些内容七台河新闻联播视频
  • 宁波网站推广联系方式沙县住房和城乡规划建设局网站
  • 源代码大全兰州正规seo整站优化工具
  • 网站建设 html5诸葛企业网站建设公司
  • 网站托管运营方案外贸网站如何推广
  • 黄石手机网站建设网站做什么推广好
  • world做网站网络服务合同模板