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

海口会计报名网站职业培训机构有哪些

海口会计报名网站,职业培训机构有哪些,网站 风格,thymeleaf做网站 seo需求:使用websocket不借助插件实现发布,订阅,网络断开重连,单点登录后挤号的功能 1.单点登录(同一账号同一时间只有一个在线,禁止多用户登录) 实现:在用户登录之后获取到token令牌并…

需求:使用websocket不借助插件实现发布,订阅,网络断开重连,单点登录后挤号的功能

1.单点登录(同一账号同一时间只有一个在线,禁止多用户登录)

 实现:在用户登录之后获取到token令牌并且存入到本地,可以判断token令牌是否失效来让用户退出登录,websocket的操作是让用户登录后连接到websocket并且发送指令,这边发送的指令是后端给的,之后前端进行接受消息,如果消息是退出登录的直接让他清空本地并且跳转到登录页就行

1.登录获取token令牌并且存储到localStorage

2.在layout也就是页面主体框架拿到token并且去连接websocket

3.连接成功后直接发送指令,之后再去监听返给前端的消息之后实现退出操作

     url = `${protocol}://websocket的地址,要后端给?token=${token}`;,

这个我举个例子,连接地址应该是这样的:ws://127.0.0.1:8080?token=362466325,

 ws.send(`msg:${this.data.id}`);这个也是后端定的要把账户的id给他,这样去监听登录

重连,之后消息返回loginOut后做退出登录的操作,如果链接因为各种原因关闭了,直接去请求重连。

 retryCount: 0,

 maxRetryCount: 5,

 retryInterval: 2000, // 重试间隔时间,单位:毫秒

注意!!websocket不能设置请求头携带token好像,试了很多次都不行,用ws插件也不行,只能拼接token给后端了,有更好的方法可以在评论区联系我

let ws;
let url = "";
export default { mounted() {this.connectWebsocket();},methods: {connectWebsocket() {let protocol = "ws";if (typeof WebSocket === "undefined") {console.log("您的浏览器不支持WebSocket");return;} else {if (window.location.protocol == "https:") {protocol = "wss";}let token = localStorage.getItem("token");url = `${protocol}://websocket的地址,要后端给?token=${token}`;// 打开一个wsws = new WebSocket(url);ws.onopen = () => {// 发送数据console.log("ws已连接!!");ws.send(`msg:${this.data.id}`);// this.$message.success("ws已连接!!");};// 发生错误时ws.onerror = (evt) => {console.log("ws错误:", evt);};// 关闭连接ws.onclose = (event) => {console.warn("WebSocket 已关闭");console.log("关闭代码:", event.code);console.log("关闭原因:", event.reason);// 处理连接断开事件this.handleWebSocketClose();};ws.onmessage = (evt) => {if (evt.data == "loginOut") {// 此时要做清空数据的操作this.$message.warning("您的帐号在另一地点登录,您已被迫下线!!");this.$router.replace("/");localStorage.clear();ws.close();ws.onclose = () => {console.log("ws断开连接成功");};}console.log(evt, "接收到的消息");};this.$bus.$emit("Websocket", ws);}},handleWebSocketClose() {if (this.retryCount < this.maxRetryCount) {console.log(`正在尝试第 ${this.retryCount + 1} 次重连...`);setTimeout(() => {this.connectWebsocket();this.retryCount++;}, this.retryInterval);} else {console.error("WebSocket 连接失败,已达到最大重试次数");}},
}
}

2.发布订阅

注意!!这边每次发布的时候都应该重新连一个新的消息,不然和之前的登录的消息搞混了就不好了,特别是在做操作的时候,比如el-table的编辑操作这些,每次关闭弹窗肯定要关闭websocket,如果和登录的消息搞混了,关闭弹窗就不能实时接收到单点登录传来的消息了

这个connectWebsocket和上面的不是一个,这个是需要实时推送页面的websocket连接,不会影响全局的单点登录的。

<script>
let websocket;
let url = "";export default {
connectWebsocket(data) {let protocol = "ws";if (typeof WebSocket === "undefined") {console.log("您的浏览器不支持WebSocket");return;} else {if (window.location.protocol == "https:") {protocol = "wss";}let token = localStorage.getItem("token");url = `${protocol}://后端的给的地址?token=${token}`;// 打开一个websocketwebsocket = new WebSocket(url);websocket.onopen = () => {// 发送数据// console.log("websocket已连接!!");websocket.send(data);this.$message.success("websocket已连接!!");};// 发生错误时websocket.onerror = (evt) => {console.log("websocket错误:", evt);};// 关闭连接websocket.onclose = (event) => {console.warn("WebSocket 已关闭");console.log("关闭代码:", event.code);console.log("关闭原因:", event.reason);// 处理连接断开事件this.handleWebSocketClose(data);};}},handleWebSocketClose(data) {if (this.retryCount < this.maxRetryCount) {console.log(`正在尝试第 ${this.retryCount + 1} 次重连...`);setTimeout(() => {this.connectWebsocket(data);this.retryCount++;}, this.retryInterval);} else {this.$message.error("WebSocket 连接失败!!");console.error("WebSocket 连接失败,已达到最大重试次数");}},
}
</script>

2.1模拟编辑操作需要发布消息

1.点击编辑后打开并且实时接收

    updData(row) {this.connectWebsocket(`data_imei:${row.id}`);websocket.onmessage = (evt) => {//如果收到的消息是msgUpdif(evt.data=='msgUpd'){let data = JSON.parse(evt.data);//把得到的数据进行json转换之后再给tableData进行展示就行let tableData.unshift(data)//也不能一直接受吧,那数据得多少啊,定义一下接收到多少条后截取if (tableData.length > 500) {tableData.splice(500);}}}
}

2.关闭弹窗后需要断开连接

  closeWebSocket() {if (websocket != null) {websocket.close();websocket.onclose = () => {console.log("websocket断开连接成功");};}},

3.在离开websocket推送页面后也关闭连接

  destroyed() {if (websocket != null) {websocket.close();websocket.onclose = () => {console.log("websocket断开连接成功");};}},

文章到此结束,希望对你所有帮助~~

http://www.mmbaike.com/news/100768.html

相关文章:

  • 北京做网站多少钱系统优化软件哪个好
  • 常州网站公司怎么选2023新闻大事件摘抄
  • php抗议小卫士填报代码网页制作网站制作网站的公司有哪些
  • 做网站怎么备案奉化网站关键词优化费用
  • 我的小程序怎么制作专业搜索引擎seo技术公司
  • 自己的网站如何做推广地域名网址查询
  • WordPress链接变色优化方案电子版
  • 建设外贸购物网站公司域名查询官网
  • 大连网站建设怎么做公司网址怎么注册
  • 哪类网站赚钱 优帮云网站推广代理
  • 国外建设短视频网站如何建立自己的网站平台
  • 微信如何做积分商城网站常见的网络营销方法
  • 做网站麻烦不网络推广教程
  • 改图宝在线制作印章宁波网站推广优化
  • 口岸地区网站建设内容上海网络推广联盟
  • 网站 大气最新的新闻 最新消息
  • 一流的商城网站建设中美关系最新消息
  • 网站免费空间购买整合营销经典案例
  • 企业建站网络公司百度推广登录平台怎么收费
  • 做黑界头像网站网络营销毕业论文8000字
  • 网上做论文的网站有哪些好看的网页设计作品
  • 免费的个人网站空间aso优化报价
  • 定制网站制作服务商全网搜索引擎优化
  • 怎么用微信做网站seo短期课程
  • 郑州网站建设 推广广告推广媒体
  • 网站中队人物介绍怎么做atp最新排名
  • 昆明网站建设哪家好合肥网站优化推广方案
  • 用电脑做网站的历史在哪里找南宁网络推广服务商
  • 杭州网站建设 seo新人跑业务怎么找客户
  • 手机做服务器建网站平台推广网站