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

做外单阿里的网站友情链接举例

做外单阿里的网站,友情链接举例,开个公司做购物网站,积积桶肤肤的免费软件大全1.前言 为什么会将websocket和promise所联系起来呢? 因为websocket不像http请求一样,发送的请求不会得到对应的回复,这样就会导致如果通过websocket发送消息之后,就无法对此消息进行追溯,使用起来非常不方便,并且很多功能无法实现,与客户端/服务端协调好数据个时候,就可以通…

1.前言

为什么会将websocketpromise所联系起来呢?

因为websocket不像http请求一样,发送的请求不会得到对应的回复,这样就会导致如果通过websocket发送消息之后,就无法对此消息进行追溯,使用起来非常不方便,并且很多功能无法实现,与客户端/服务端协调好数据个时候,就可以通过promise获取到消息的回执结果了

如何结合起来?

大致就是websocket的两端(客户端,服务端),提前确定好websocket消息的格式,进行协调,需要注意有个关键点,就是每个消息都会有一个唯一标识(uuid),发送到服务端的消息的状态以及promise的成功与失败,都需要根据这个唯一标识进行处理

2.步骤拆分

  1. 首先创建一个自定义的websocket的消息发送的方法
const send = (param) => {}
  1. 在每个发送到服务端消息中都添加一个uuid,用于标识当前消息
const send = (param) => {const data = {uuid:... // uuid...param}
}
  1. 发送消息的方法返回一个promise,得到promiseresolvereject方法
const send = (param) => {return new Promise((resolve,reject)=>{const data = {uuid:... // uuid...param}})
}
  1. 创建一个空对象,对象中保存promiseresolvereject方法(这里可以自定义websocket消息超时的处理逻辑,可自行拓展)
const send = (param) => {return new Promise((resolve,reject)=>{const data = {uuid:... // uuid...param}const promiseData = {resolve,reject}})
}
  1. 将此对象添加到一个Map解构,其中的key就是唯一标识,value就是上方创建的对象,这样的话,每个消息都会有一个单独的对象,可以控制此消息的成功,失败,超时等等处理
const receiverMap = new Map()
const send = (param) => {return new Promise((resolve,reject)=>{const data = {uuid:... // uuid...param}const promiseData = {resolve,reject}receiverMap.set(data.uuid, promiseData)})
}
  1. 然后将websocket消息发送出去(需要保证在这些操作之前websocket已经连接了)
const receiverMap = new Map()
const send = (param) => {return new Promise((resolve,reject)=>{const data = {uuid:... // uuid...param}const promiseData = {resolve,reject}receiverMap.set(data.uuid, promiseData)webscoket.send(data)})
}
  1. 服务端接收到客户端发送的websocket消息之后,将唯一标识(uuid)提取出来,然后执行对应操作
  2. 对应操作执行成功或失败后按照与客户端协定好的格式返回给客户端,例如定义一个status字段,0表示成功,1表示执行失败,需要注意,这里的uuid也需要返回给客户端,客户端需要获取消息对应的请求是什么
  3. 客户端接收到请求后,将status,uuid字段解构出来,此时就可以通过uuidMap解构中获取到对应的promiseresolvereject方法了,此时再根据status的状态决定调用resolve还是reject即可
 webscoket.addEventListener('message', (data)=>{// 解析messageData的内容const { uuid, status,param } = data// 获取当前接受到的消息所对应的websocket消息对象const msgRectiver = receiverMap.get(uuid)if(status === 0){msgRectiver.resolve(param)} else {msgRectiver.reject(param)}})
  1. 注意,请求收到后,无论失败还是成功,都需要将Map解构中当前的uuid删除掉,避免大量数据不清楚导致的Map解构过大
 webscoket.addEventListener('message', (data)=>{// 解析messageData的内容const { uuid, status,param } = data// 获取当前接受到的消息所对应的websocket消息对象const msgRectiver = receiverMap.get(uuid)if(status === 0){msgRectiver.resolve(param)} else {msgRectiver.reject(param)}// 从Map中删除对应的消息receiverMap.delete(uuid)})

3.整体代码

const receiverMap = new Map()
const send = (param) => {return new Promise((resolve,reject)=>{const data = {uuid:... // uuid...param}const promiseData = {resolve,reject}receiverMap.set(data.uuid, promiseData)webscoket.send(data)})
}webscoket.addEventListener('message', (data)=>{// 解析messageData的内容const { uuid, status,param } = data// 获取当前接受到的消息所对应的websocket消息对象const msgRectiver = receiverMap.get(uuid)if(status === 0){msgRectiver.resolve(param)} else {msgRectiver.reject(param)}// 从Map中删除对应的消息receiverMap.delete(uuid)})

4.补充以及总结

这里只是大致实现了websocketpromise结合后的效果,内部可以进行很多其他的自定义操作,例如超时判断,消息警告,消息正在处理中,等等。

可以根据自己的需求进行调整,通过这里的方法,就可以对websocket消息进行追踪了,并且使用体验也比较好,可以直接使用.then,.catch等方法直接监听本次消息是否执行成功,以及获取到执行过程中服务端返回的一些数据!

到这里,本篇文章内容已经全部结束了,如果有什么其他的想法或者好的建议,欢迎大家私信或评论😁

http://www.dtcms.com/wzjs/297493.html

相关文章:

  • 广告品牌设计机构网站织梦模板网络关键词优化软件
  • 云浮哪有做网站公司网站优化公司哪个好
  • 网站建设的费用每日新闻简报
  • 青岛 两学一做 网站怎么找网站
  • 哪个网站做的简历比较好宽带营销案例100例
  • 网站建设中的功能杭州百度人工优化
  • 如何设置网站名字吗uc浏览器网页版入口
  • 设计在线免费观看seo批量建站
  • wordpress弹窗登录注册seo是什么意思seo是什么职位
  • 网站登录注册页面模板下载昆明排名优化
  • 网站建设征求意见通知佛山网站建设正规公司
  • b2b导航seo投放是什么意思
  • 电影海报模板哪个网站好网络推广和竞价怎么做
  • wordpress文章归档页面如何结合搜索检索与seo推广
  • 网站建设规范网站制作的重要性及步骤详解
  • 专门做自由行的网站2345网址导航官方网站
  • 外贸网站建设推广优化什么样的人适合做营销
  • 网站支付页面怎么做的合肥网站推广优化公司
  • 网站打不开怎么回事黑帽seo排名
  • 兰州最好的网站开发公司韶关seo
  • 如何做图片 网站 链接百度软件中心
  • 音箱厂家东莞网站建设石家庄做网站推广排名的公司
  • 网站管理助手 无限制网络营销是网上销售吗
  • 网络营销网站建设实训北京效果好的网站推广
  • abundance酷黑购物wordpress主题seo和sem是什么
  • 上海建设网站价格舆情危机公关公司
  • 找公司做网站运营怎么样长沙官网seo服务
  • 江北网站建设河南纯手工seo
  • 网站404页面模板整合营销公司排名
  • wordpress和hexo百度移动seo首选帝搜软件