| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> websocket实现已读未读 -> 正文阅读 |
|
[网络协议]websocket实现已读未读 |
1.引入websocket.js到项目里,附上websocket.js代码 class Echo { ? // // ws 服务地址 ? // public addr; ? // // ws 要监听的事件 ? // public events; ? // // 当前是否正在重联络 ? // public isRetrying; ? // // ws 实例 ? // public ws; ? // // 注册的 error 回调 ? // public errorCallback; ? constructor() { ? ? this.RETRY_COUNT = 10; ? ? this.events = new Map(); ? ? this.isRetrying = false; ? } ? // 连接 ? connect(addr, successCallback, errorCallback) { ? ? this.addr = addr; ? ? this.successCallback = successCallback; ? ? this.errorCallback = errorCallback; ? ? this.ws = new WebSocket(this.addr); ? ? this.ws.addEventListener("open", event => { ? ? ? this.onOpen(event); ? ? }); ? ? this.ws.addEventListener("message", event => { ? ? ? this.onMessage(event); ? ? }); ? ? this.ws.addEventListener("close", event => { ? ? ? this.onClose(event); ? ? }); ? ? this.ws.addEventListener("error", event => { ? ? ? this.onError(event); ? ? }); ? } ? // open 回调 ? onOpen(event) { ? ? console.log('链接成功',event); ? ? this.successCallback(); ? } ? // 收到消息 ? onMessage(event) { ? ? ? ? const ECHO_ERROR = "echo.error"; ? ? // 后端返回消息类型为 {event:'',data:'{}'} 的json字符串 ? ? const message = JSON.parse(event.data); ? ? if (message.event === ECHO_ERROR) { ? ? ? return; ? ? } ? ? console.log('收到message消息',message); ? ? this.trigger(message.event, message.data?JSON.parse(message.data):{}); ? } ? // 连接关闭 ? onClose(event) { ? ? // this.retry(); ? } ? // 连接错误 ? onError(event) { ? ? this.errorCallback && this.errorCallback("重新连接"); ? ? try { ? ? ? this.retry(); ? ? } catch (err) { ? ? ? console.log(err || event); ? ? } ? } ? // 重连 ? retry() { ? ? if (this.isRetrying) { ? ? ? return; ? ? } ? ? if(this.RETRY_COUNT===0){ ? ? ? return; ? ? } ? ? this.RETRY_COUNT=this.RETRY_COUNT-1; ? ? this.isRetrying = true; ? ? setTimeout(() => { ? ? ? // 重新实例化一个 ws ? ? ? this.ws = new WebSocket(this.addr); ? ? ? this.connection(); ? ? ? this.isRetrying = false; ? ? }, 5000); ? } ? // 销毁此次长链接 ? destroy() { ? ? console.log('销毁此次长链接'); ? ? console.log('sockerDestry'); ? ? this.ws.close(); ? ? this.ws.onmessage = null; ? ? this.ws.onopen = null; ? ? this.ws.onclose = null; ? ? this.ws = null; ? ? // delete this.ws; ? } ? // 添加事件监听 ? listen(event, callback) { ? ? this.events.set(event, callback); ? ? return this; ? } ? // 停止事件监听 ? stopListen(event) { ? ? this.events.delete(event); ? ? return this; ? } ? // 发出消息 ? emit(msg) { ? ? this.ws.send(JSON.stringify(msg)); ? } ? // 事件发生时执行相应的 callback ? trigger(event, data) { ? ? this.events.forEach((callback, key) => { ? ? ? if (event === key) { ? ? ? ? callback(data); ? ? ? } ? ? }); ? } } export default Echo; 2.配置,环境wsUrl:'wss://接口地址', 3.在vuex里做缓存,存储 import Echo from '@/utils/websocket.js'; import { wsUrl } from '@/config' const state = { ? ? wsClient: new Echo() ? } ? const mutations = { ? ? setWsClient(state, wsClient){ ? ? ? ? state.wsClient = wsClient ? ? }, ? } ? const actions = { ? ? // 设置websocket ? ? wsClientConnect({ commit, state }, id) { ? ? ? state.wsClient.connect(`${wsUrl}/${id}`,()=>{ ? ? ? ? commit('setWsClient', state.wsClient) ? ? ? ? console.log('success') ? ? ? },()=>{ ? ? ? ? ? console.log('error') ? ? ? }); ? ? }, ? ? wsDestroy({ commit, state }){ ? ? ? state.wsClient.destroy(); ? ? } ? } ? export default { ? ? namespaced:true, ? ? state, ? ? mutations, ? ? actions ? } 4.页面红点,需求,取值 userInfoStore(){ ? ? ? return this.$store.getters.userInfo ? ? } 5.监听,是否已读 userId(value){ ? ? ? // 监听userid 进行websocket连接 ? ? ? this.$store.dispatch('websocket/wsClientConnect', value) ? ? } |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:46:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |