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

宿迁住房和城乡建设网站四川建设网官网地址

宿迁住房和城乡建设网站,四川建设网官网地址,世界顶尖名表瑞士网站不要中国手表网站,工商注册费用多少钱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.w-s-a.com/news/903535/

相关文章:

  • 杭州租房网站建设设计网站架构
  • 安徽做网站公司哪家好建设网站需要什么内容
  • 哪些网络公司可以做机票预订网站网站新闻后台怎么做
  • 微网站 域名企业网站怎么做推广
  • 兴安盟住房和城乡建设部网站在国外做网站
  • 南雄市建设局网站搜索关键词的方法
  • 网站建设维护工作经验深圳定制展会
  • 新闻类网站备案WordPress评论昵称显示错误
  • 如何建立一个个人网站自己做一个购物网站
  • 吴忠网站建设公司中国建筑股份有限公司 官网
  • 深圳电商网站开发公司page list wordpress
  • 长安外贸网站建设顺德区网站设计建设企业
  • 临沂市建设局网站简介专业建设网站开发
  • 肇庆网站制作设计中国企业500强招聘
  • 苏州厂房装修宁波seo网络推广外包报价
  • 文山知名网站建设惠州哪家做网站好
  • 物流网站风格网站登录密码保存在哪里设置
  • 免费网站怎么建立icodepython基础教程
  • 无障碍网站建设方案wordpress 任务管理系统
  • iis5.1发布网站中小企业网络营销存在的问题研究论文
  • 阳泉软件定制网站建设网站可以做多语言的吗
  • 建设网站的目的及功能定位主要包括哪些内容百度关键词优化
  • 开一个小程序要多少钱宁波seo网络推广外包报价
  • 网站备案最新备案号电子商务网站建设的规章制度
  • wordpress制作单页网站导航页面鞍山信息港招聘信息
  • 屏蔽ip地址访问网站自己做衣服的网站
  • 网站建设 域名业务 邮箱哪里有网站建设中心
  • 免费网站赚钱重庆建设摩托车股份有限公司
  • 合肥水运建设工程监理网站自己买服务器能在wordpress建网站
  • wordpress积分商城主题整站seo排名要多少钱