【前端】websocket 讲解与项目中的使用

简介: 【前端】websocket 讲解与项目中的使用


1、SSE(Server-sent Events)

SSE(Server-sent Events)是 WebSocket 的一种轻量代替方案,使用 HTTP 协议。 => Server-Sent Events 教程

2、stomp 介绍

3、MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议

MQTT JavaScript 客户端库

MQTT 入门介绍

4、课外阅读:[WebSocket 是什么原理?为什么可以实现持久连接?

]( )

源代码

==================================================================
import { EventLsbridge } from ‘@/common/eventLsbridge’
import { loadFromSession } from ‘@/common/session-storage’
import { Message } from ‘element-ui’
const timer = {
reconnectObj: null,
wsTimeoutObj: null,
serverTimeoutObj: null,
// 重连时间间隔(s)
reconnectTime: 3
}
const state = {
ws: null,
// 心跳时间(s)
wsTimeout: 20,
// 等待心跳响应时间(s),等待心跳的响应时间要大于心跳时间4s以上
waitHeartTime: 24
}
const mutations = {
set_reconnectObj: (state, val) => {
state.reconnectObj = val
},
}
const actions = {
// 心跳重置
wsHearReset({ dispatch }) {
clearTimeout(timer.serverTimeoutObj)
clearTimeout(timer.wsTimeoutObj)
dispatch(‘wsHeartStart’)
},
// 开启心跳
wsHeartStart({ state, dispatch }) {
timer.wsTimeoutObj = setTimeout(() => {
if(state.ws && state.ws.readyState == 1) {
state.ws.send(‘’)
} else {
dispatch(‘handlerWSError’)
}
}, state.wsTimeout * 1000)
timer.serverTimeoutObj = setTimeout(() => {
console.log(‘接收心跳异常!’)
dispatch(‘handlerWSError’)
}, state.waitHeartTime * 1000)
},
// 初始化ws连接
initWebsocket({ dispatch, state }) {
if (state.ws) {
return
} else {
return new Promise(resolve => {
let url = ${process.env['VUE_APP_WEBSOCKET']}/websocket
state.ws = new WebSocket(url)
state.ws.addEventListener(‘open’, e => {
console.log(‘长连接连接成功’)
clearTimeout(timer.reconnectObj)
dispatch(‘wsHeartStart’)
})
state.ws.addEventListener(‘message’, e => {
dispatch(‘wsHearReset’)
dispatch(‘handlerWSMessage’, e)
})
state.ws.addEventListener(‘close’, e => {
console.log(‘ws close’)
dispatch(‘handlerWSClose’, e)
})
state.ws.addEventListener(‘error’, e => {
console.log(‘ws error’)
dispatch(‘handlerWSError’, e)
})
})
}
},
handlerSend({state}, id = -1) {
if(!state.ws) {
return
}
if(state.ws.readyState == 1) {
state.ws.send(
JSON.stringify({
id
})
)
}
},
handlerWSClose({ state }, e) {
state.ws?.close()
},
handlerWSError({state, dispatch}, e) {
console.log(‘ws-error’)
state.ws?.close()
state.ws = null
dispatch(‘reconnect’)
},
reconnect({state, commit, dispatch}) {
console.log(‘ws-重连’)
clearTimeout(timer.wsTimeoutObj)
clearTimeout(timer.serverTimeoutObj)
clearTimeout(timer.reconnectObj)
if (loadFromSession(‘userInfo’)?.userId) {
Message.warning(‘网络出现异常,请检查网络后尝试刷新页面’)
}
timer.reconnectObj = window.setTimeout(() => {
dispatch(‘initWebsocket’)
timer.reconnectTime += 4
if(timer.reconnectTime > 60) {
timer.reconnectTime = 20
}
}, timer.reconnectTime * 1000)
},
// ws回调
handlerWSMessage({state}, e) {
let respData = {}
try {
respData = JSON.parse(e.data)
} catch (e) {
// not todo
}
if (respData?.data) {
EventLsbridge.vueEmit(EventLsbridge.eventName.wsData, respData)
}
}
}
export default {
namespaced: true,
state,
mutations,
actions
}
相关文章
|
9天前
|
前端开发 JavaScript 定位技术
一、前端高德地图注册、项目中引入、渲染标记(Marker)and覆盖物(Circle)
文章介绍了如何在前端项目中注册并使用高德地图API,包括注册高德开放平台账号、引入高德地图到项目、以及如何在地图上渲染标记(Marker)和覆盖物(Circle)。
25 1
|
2月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
34 0
|
9天前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
23 2
|
2月前
|
JavaScript 前端开发 Java
SpringBoot + Vue 前端后分离项目精进版本
这篇文章详细介绍了一个基于SpringBoot + Vue的前后端分离项目的搭建过程,包括前端Vue项目的初始化、依赖安装、页面创建和路由配置,以及后端SpringBoot项目的依赖添加、配置文件修改、代码实现和跨域问题的解决,最后展示了项目运行效果。
SpringBoot + Vue 前端后分离项目精进版本
|
2月前
|
前端开发 JavaScript
在 Vue3 + ElementPlus 项目中使用 computed 实现前端静态分页
本文介绍了在Vue3 + ElementPlus项目中使用`computed`属性实现前端静态分页的方法,并提供了详细的示例代码和运行效果。
107 1
在 Vue3 + ElementPlus 项目中使用 computed 实现前端静态分页
|
2月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!
28 0
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
|
2月前
|
开发者 C# C++
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
55 0
|
2月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
76 0
|
2月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
56 0
|
2月前
|
前端开发 JavaScript 编译器
【性能革命】Angular Ivy编译器:一场前端开发者的极速盛宴,揭秘应用瘦身与提速的黑科技,让你的Angular项目焕发新生的终极指南
【8月更文挑战第31天】Angular Ivy编译器是Angular团队推出的更新,旨在改善应用性能,减少构建时间和代码量。自Angular 9起,Ivy成为默认编译器。本文通过案例分析,介绍Ivy的工作原理及其优势。以一个复杂应用为例,展示了Ivy如何通过减少生成的JavaScript代码量、优化模板表达式解析等方式提升性能。通过创建示例项目并比较启用与未启用Ivy的构建结果,证明了Ivy在构建速度和文件大小上的显著改进,同时提高了运行时性能。这对于追求高性能和快速开发的应用至关重要。
25 0
下一篇
无影云桌面