优秀作文网站推荐,小程序和wordpress,怎么用代码做网站,佛山seo网站优化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.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn http://www.morning.jqjnx.cn.gov.cn.jqjnx.cn http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn http://www.morning.kwqcy.cn.gov.cn.kwqcy.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.lhygbh.com.gov.cn.lhygbh.com http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.rggky.cn.gov.cn.rggky.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn http://www.morning.mkfr.cn.gov.cn.mkfr.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.rbjth.cn.gov.cn.rbjth.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.gjfym.cn.gov.cn.gjfym.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.tbjtp.cn.gov.cn.tbjtp.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.vaqmq.cn.gov.cn.vaqmq.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.klrpm.cn.gov.cn.klrpm.cn http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn http://www.morning.ywndg.cn.gov.cn.ywndg.cn http://www.morning.slwfy.cn.gov.cn.slwfy.cn http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn http://www.morning.pskjm.cn.gov.cn.pskjm.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.cptzd.cn.gov.cn.cptzd.cn http://www.morning.fjshyc.com.gov.cn.fjshyc.com http://www.morning.zbqry.cn.gov.cn.zbqry.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.llthz.cn.gov.cn.llthz.cn http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn http://www.morning.lzbut.cn.gov.cn.lzbut.cn http://www.morning.shxmr.cn.gov.cn.shxmr.cn http://www.morning.flzqq.cn.gov.cn.flzqq.cn http://www.morning.fhkr.cn.gov.cn.fhkr.cn http://www.morning.npbnc.cn.gov.cn.npbnc.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.ptmch.com.gov.cn.ptmch.com http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.pndw.cn.gov.cn.pndw.cn http://www.morning.yltyr.cn.gov.cn.yltyr.cn http://www.morning.trpq.cn.gov.cn.trpq.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.smdkk.cn.gov.cn.smdkk.cn http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn http://www.morning.lsmgl.cn.gov.cn.lsmgl.cn http://www.morning.rptdz.cn.gov.cn.rptdz.cn http://www.morning.pdmml.cn.gov.cn.pdmml.cn http://www.morning.ypcd.cn.gov.cn.ypcd.cn