websocket实现在线聊天,websocket实现简单的聊天
这篇文章主要利用websocked建立长连接,利用状态管理全局通信的特性,以及手表,计算机函数监听消息变化,并驱动页面变化实现实时聊天,感兴趣的可以了解一下
目录
前言一、效果如图二、具体实现步骤1.引入vu ex2。网络瘫痪实现总结
前言
这篇文章主要利用websocked建立长连接,利用状态管理全局通信的特性,以及手表,计算机函数监听消息变化,并驱动页面变化实现实时聊天。
一、效果如图
二、具体实现步骤
1.引入Vuex
代码如下(示例):
//安装状态管理
新公共管理安装状态管理
//main.js中引入
从导入存储。/商店
新Vue({
埃尔: #app ,
路由器,
店,
render: h=h(App)
})
我对状态管理进行了简单的封装,如下图,各位小伙伴可以按照自己使用的习惯进行。
2.webscoked实现
网络瘫痪实现主要分为一下几个部分:
建立连接
发送心跳包
失败或者出错之后重新链接
常量状态={
url: ,
webSocket: null,
lockReconnect: false,
消息列表:[],
msgItem: {},
pingInterval: null,
超时:空,
}
常量突变={
【类型. INIT_WEBSOCKET](状态,数据){
state.webSocket=data
},
【类型. LOCK_RE_CONNECT](状态,数据){
state.lockReconnect=data
},
【类型. SET_PING_INTERVAL](状态,数据){
state.pingInterval=data
},
【类型. SET_MSG_LIST](状态,数据){
state.messageList.push(数据)
state.msgItem=data
},
}
常量操作={
initWebSocket({ state,commit,dispatch,rootState }) {
if (state.webSocket) {
返回
}
const real URL=WSS _ URL根状态。医生基本信息。代币
const webSocket=新WebSocket(realUrl)
webSocket.onopen=()={
console.log(建立链接);
派遣("心脏检查")
}
webSocket.onmessage=e={
console.log(接收到消息,e);
尝试{
if(类型e . data=== string e . data!==PONG) {
let res=JSON.parse(e.data)
console.log(接收到内容,RES);
提交(设置消息列表,res)
}
} catch(错误){}
}
webSocket.onclose=()={
console.log(关闭);
派遣("重新连接")
}
webSocket.onerror=()={
console.log(失败);
派遣("重新连接")
}
提交( INIT_WEBSOCKET ,WEBSOCKET)
},
//心跳包
heartCheck({ state,commit }) {
console.log(state, state );
const { webSocket }=state
const ping interval=setInterval(()={
if (webSocket.readyState===1) {
webSocket.send(PING )
}
}, 20000)
提交(设置PING间隔,PING间隔)
},
//重新链接
重新连接({状态,提交,分派}) {
if (state.lockReconnect) {
返回
}
提交( INIT_WEBSOCKET ,null)
提交(锁定重新连接,真)
setTimeout(()={
分派( initWebSocket )
提交( LOCK_RE_CONNECT ,false)
}, 20000)
},
}
const getters={
web套接字:state=state。web套接字,
消息列表:状态=状态。消息列表,
msgItem: state=state.msgItem,
}
导出默认值{
命名空间:对,
状态,
行动,
突变,
吸气剂
}
页面获取
方法:{
.mapActions(webSocket ,[initWebSocket , close]),
pushItem(项目){
const initMsg=item
这个。msglist。push(initMsg);
}
}
已安装(){
这个。初始化web套接字();
}
观察:{
msgItem:函数(项目){
this.pushItem(项目);
}
},
计算值:{
.mapGetters(webSocket ,[messageList , msgItem]),
},
用户界面界面
li v-for=(item,I)in msgList :key= I class= msgBox /Li
webscoked实现思想的解释
1.首先在操作中创建一个ws链接。
2.利用watch属性监控页面中状态对应消息的变化,接收到新消息后,改变页面显示的消息列表,利用双向绑定实现页面的自动更新。
3.发送消息时调用后端接口,将新消息插入页面显示的消息列表中。
4.由于ws是一个长链接,一旦建立就不会轻易被破坏,所以只要接收到后端推送的消息,判断是否有消息内容,当有消息内容时,只需要改变状态中的消息列表,页面就会根据watch属性自动更新,完美实现了即时通讯的功能。
总结
这就是这篇关于websocket Vuex实现一个实时聊天软件的文章。更多相关websocket Vuex实时聊天内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。