websocket+Vuex實現(xiàn)一個實時聊天軟件
前言
這篇文章主要利用websocked 建立長連接,利用Vuex全局通信的特性,以及watch,computed函數(shù)監(jiān)聽消息變化,并驅(qū)動頁面變化實現(xiàn)實時聊天。
一、效果如圖

二、具體實現(xiàn)步驟
1.引入Vuex
代碼如下(示例):
//安裝vuex
npm install vuex
//main.js 中引入
import store from './store'
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
我對Vuex進行了簡單的封裝,如下圖,各位小伙伴可以按照自己使用的習(xí)慣進行。

2.webscoked實現(xiàn)
webscoked實現(xiàn)主要分為一下幾個部分:
建立連接
發(fā)送心跳包
失敗或者出錯之后重新鏈接
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('接收到內(nèi)容', res);
commit('SET_MSG_LIST', res)
}
} catch (error) {}
}
webSocket.onclose = () => {
console.log('關(guān)閉');
dispatch('reConnect')
}
webSocket.onerror = () => {
console.log('失敗');
dispatch('reConnect')
}
commit('INIT_WEBSOCKET', webSocket)
},
// 心跳包
heartCheck({ state, commit }) {
console.log(state, 'state');
const { webSocket } = state
const 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
}
頁面獲取
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"]),
},
UI界面
<li v-for="(item, i) in msgList" :key="i" class="msgBox"></li>
webscoked實現(xiàn)思路講解
1.首先在actions中創(chuàng)建ws鏈接。
2.利用watch屬性在在頁面中監(jiān)聽state中對應(yīng)的消息變化,當收到新的消息之后,改變頁面展示的消息列表,利用雙向綁定實現(xiàn)頁面自動更新。
3.發(fā)送消息的時候調(diào)用后端接口,并將新消息插入到頁面展示的消息列表中
4.因為ws是長鏈接一旦建立不會輕易斷開,所以只要收到后端推送的消息,并判斷是否具有消息內(nèi)容,當有有消息內(nèi)容只需要改變state中的消息列表,頁面就會根據(jù)watch屬性自動更新,完美實現(xiàn)即時通訊的功能。
總結(jié)
到此這篇關(guān)于websocket+Vuex實現(xiàn)一個實時聊天軟件的文章就介紹到這了,更多相關(guān)websocket+Vuex實時聊天內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文詳解websocket在vue2中的封裝使用
- Vue項目中Websocket的使用實例
- 前端之vue3使用WebSocket的詳細步驟
- vue3.0中使用websocket,封裝到公共方法的實現(xiàn)
- vue3+ts+Vuex中使用websocket協(xié)議方式
- Vue項目使用Websocket大文件FileReader()切片上傳實例
- vue項目使用websocket連接問題及解決
- Vue?websocket封裝實現(xiàn)方法詳解
- vue使用websocket概念及示例
- vue基于websocket實現(xiàn)智能聊天及吸附動畫效果
- Flask使用SocketIO實現(xiàn)WebSocket與Vue進行實時推送
- vue+flv.js+SpringBoot+websocket實現(xiàn)視頻監(jiān)控與回放功能
- vue項目中使用websocket的實現(xiàn)
- vue 項目中使用websocket的正確姿勢
- vue實現(xiàn)websocket客服聊天功能
- Vue+Websocket簡單實現(xiàn)聊天功能
- vue使用WebSocket模擬實現(xiàn)聊天功能
- 使用WebSocket+SpringBoot+Vue搭建簡易網(wǎng)頁聊天室的實現(xiàn)代碼
相關(guān)文章
基于uniapp+vue3自定義增強版table表格組件「兼容H5+小程序+App端」
uv3-table:一款基于uniapp+vue3跨端自定義手機端增強版表格組件,支持固定表頭/列、邊框、斑馬紋、單選/多選,自定義表頭/表體插槽、左右固定列陰影高亮顯示,支持編譯兼容H5+小程序端+App端,H5+小程序+App端,多端運行一致2024-05-05
Vue2實現(xiàn)自適應(yīng)屏幕大小的兩種方法詳解
這篇文章主要為大家詳細介紹了Vue2實現(xiàn)自適應(yīng)屏幕大小的兩種方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
vue中json格式化顯示數(shù)據(jù)(vue-json-viewer)
這篇文章主要給大家介紹了關(guān)于vue中json格式化顯示數(shù)據(jù)(vue-json-viewer)的相關(guān)資料,Vue-json-viewer是一個Vue組件,用于在Vue應(yīng)用中顯示JSON數(shù)據(jù)的可視化工具,需要的朋友可以參考下2024-05-05

