IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:42:19  更:2022-05-12 16:42:50 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码