文章目录

  • 前言
  • 一、效果如图
  • 二、具体实现步骤
    • 1.引入Vuex
    • 2.webscoked实现
  • 总结

前言

这篇文章主要利用websocked 建立长连接,利用Vuex全局通信的特性,以及watch,computed函数监听消息变化,并驱动页面变化实现实时聊天。


一、效果如图

二、具体实现步骤

1.引入Vuex

代码如下(示例):

//安装vuex
npm install vuex//main.js 中引入
import store from './store'
new Vue({el: '#app',router,store,render: h => h(App)
})

我对Vuex进行了简单的封装,如下图,各位小伙伴可以按照自己使用的习惯进行。

2.webscoked实现

webscoked实现主要分为一下几个部分:

  1. 建立连接
  2. 发送心跳包
  3. 失败或者出错之后重新链接
const state = {url: '',webSocket: null,lockReconnect: false,messageList: [],msgItem: {},pingInterval: null,timeOut: null,
}
const mutations = {[types.INIT_WEBSOCKET](state, data) {state.webSocket = data},[types.LOCK_RE_CONNECT](state, data) {state.lockReconnect = data},[types.SET_PING_INTERVAL](state, data) {state.pingInterval = data},[types.SET_MSG_LIST](state, data) {state.messageList.push(data)state.msgItem = data},
}
const actions={initWebSocket({ state, commit, dispatch, rootState }) {if (state.webSocket) {return}const realUrl = WSS_URL + rootState.doctorBasicInfo.token const webSocket = new WebSocket(realUrl)webSocket.onopen = () => {console.log('建立链接');dispatch('heartCheck')}webSocket.onmessage = e => {console.log('接收到消息', e);try {if (typeof e.data === 'string' && e.data !== 'PONG') {let res = JSON.parse(e.data)console.log('接收到内容', res);commit('SET_MSG_LIST', res)}} catch (error) {}}webSocket.onclose = () => {console.log('关闭');dispatch('reConnect')}webSocket.onerror = () => {console.log('失败');dispatch('reConnect')}commit('INIT_WEBSOCKET', webSocket)},// 心跳包heartCheck({ state, commit }) {console.log(state, 'state');const { webSocket } = stateconst pingInterval = setInterval(() => {if (webSocket.readyState === 1) {webSocket.send('PING')}}, 20000)commit('SET_PING_INTERVAL', pingInterval)},//重新链接reConnect({ state, commit, dispatch }) {if (state.lockReconnect) {return}commit('INIT_WEBSOCKET', null)commit('LOCK_RE_CONNECT', true)setTimeout(() => {dispatch('initWebSocket')commit('LOCK_RE_CONNECT', false)}, 20000)},}
const getters = {webSocket: state => state.webSocket,messageList: state => state.messageList,msgItem: state => state.msgItem,
}
export default {namespaced: true,state,actions,mutations,getters
}
  1. 页面获取
methods: {...mapActions("webSocket", ["initWebSocket", "close"]),pushItem(item) {const initMsg = item;this.msgList.push(initMsg);}
}
mounted() {this.initWebSocket();
}
watch: {msgItem: function (item) {this.pushItem(item);}},
computed: {...mapGetters("webSocket", ["messageList", "msgItem"]),},
  1. UI界面
 <li v-for="(item, i) in msgList" :key="i" class="msgBox"></li>

webscoked实现思路讲解

  • 1.首先在actions中创建ws链接。
  • 2.利用watch属性在在页面中监听state中对应的消息变化,当收到新的消息之后,改变页面展示的消息列表,利用双向绑定实现页面自动更新。
  • 3.发送消息的时候调用后端接口,并将新消息插入到页面展示的消息列表中
  • 4.因为ws是长链接一旦建立不会轻易断开,所以只要收到后端推送的消息,并判断是否具有消息内容,当有有消息内容只需要改变state中的消息列表,页面就会根据watch属性自动更新,完美实现即时通讯的功能。

总结

这篇文章主要利用websocked 建立长连接,利用Vuex全局通信的特性,以及watch,computed函数监听消息变化,并驱动页面变化实现实时聊天

利用websocket+Vuex完成一个实时聊天软件(前端部分)相关推荐

  1. 有了这款开源实时聊天软件,在网上撩妹都方便多了

    相关阅读:还在用 Guava Cache?它才是 Java 本地缓存之王! 开源最前线(ID:OpenSourceTop) 猿妹 整编 今天,猿妹要和大家分享一个开源的,功能强大的实时聊天软件--Ch ...

  2. 【亡羊补牢】计算机网络灵魂之问 第9期 如果让你做一个视频聊天软件,你用tcp还是udp?为什么?

    这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...

  3. 找不到实时聊天软件?给你推荐电商企业都在用的!

    关键词:实时聊天工具.跨境电商插件.用户运营 随着对实时聊天集成的需求不断增加,以及为您的客户支持部门节省时间和金钱的好处,实时聊天选项是您可以集成到电子商务网站的最佳应用程序之一. 在这篇文章中,了 ...

  4. React-Native with LeanCloud 构建实时聊天软件

    React-Native with LeanCloud 构建的实时聊天软件 本次hackpku中使用了rn框架写的安卓app.. 总结一下,坑多,水深. ↑感谢女票画的logo,虽然once拼成了oc ...

  5. 研究了11种实时聊天软件,我发现都具备这些功能…

    关键词:聊天插件功能.自动化聊天机器人.用户运营 查看最新和最好的电子商务企业实时聊天软件工具列表,从免费聊天应用程序到一体化平台. 根据 TechJury 的数据,四分之三的客户称他们更喜欢实时聊天 ...

  6. Firebase 教程 —— 一个实时聊天室

    原文链接 : Firebase Tutorial: Real-time Chat 原文作者 : David East 译者 : kmyhy 现在主流的 App 都开始支持聊天功能了--你的 App 是 ...

  7. 如何选择最佳的实时聊天软件

    在客户服务和支持领域,实时聊天正在改变游戏规则已不是什么秘密.从推动销售到提升客户体验和提高保留率,实时聊天已成为与客户互动和支持的一种全新的方式.客户和支持专业人员都注意到了这一点. 研究发现,高达 ...

  8. springboot+websocket+layui制作的实时聊天室,后端开发入门样例

    实时聊天室 前言 效果图 涉及技术 springboot layui websocket 实现思路 websocket在springboot下的实现 前端实现 建立websocket连接 前端对应的w ...

  9. 实时聊天软件常用架构

    我把第一个问题选为:QQ的架构.呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个这样的架构如何来作更好,大家积极发言,这也是我这个周末为自己选择的思考题,呵呵.大家 ...

最新文章

  1. 从SAP APO到SAP IBP:CIO如何实现最佳过渡?
  2. python ctypes教程_Python ctypes: Python file object - C FILE * | 易学教程
  3. python读取word文件并替换部分文字_python实现替换word中的关键文字(使用通配符)...
  4. 【渝粤教育】国家开放大学2019年春季 776员工招聘与管理 参考试题
  5. java 通道 双向原理_Java-NIO(四):通道(Channel)的原理与获取
  6. 使用阿里云极速型NAS构建高可用的GitLab
  7. 数据仓库之电商数仓-- 2、业务数据采集平台
  8. Refactoring之——代码的坏味道(一)过长方法
  9. FRR BGP协议分析4 -- 路由更新(1)
  10. kotlin学习二:初步认识kotlin
  11. 【测试工具】Selenium 自动化浏览器(Python 篇)
  12. orcale自定义数组并向数组中查询插入数据
  13. PS2019橡皮擦工具、背景橡皮擦工具、魔术橡皮擦工具
  14. CSS绘制三角形—border法
  15. 如何规避采购风险?五种有效的采购风险防范措施
  16. 什么是安全漏洞扫描?
  17. 罗技无线网卡linux,Linux(Ubuntu)装罗技LMS避坑指南
  18. k-d tree入门
  19. 安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了。
  20. 中文版Photoshop.CS6完全自学教程pdf

热门文章

  1. 直播类的app如何测试
  2. An early fire-detection method based on image processing (英文论文翻译)
  3. 马斯洛提出动机理论_马斯洛需求层次理论对企业管理的启示
  4. 惠城区计算机等级考试培训班,惠阳大亚湾哪里有电脑办公培训班
  5. 多线程的十二种设计模式
  6. 【手写 Vue2.x 源码】第二十二篇 - dep 和 watcher 关联
  7. 4.1 画图抓图工具
  8. 基于Java的聊天室系统
  9. qcqa是什么职位_QA和QC各是什么意思?
  10. 去软通动力面试被鄙视了