当前位置: 首页 > wzjs >正文

福州交通建设投资集团网站wordpress漂亮主题

福州交通建设投资集团网站,wordpress漂亮主题,简单大气网站源码,wordpress自带有用参数摘要 本文将介绍两种不同的WebSocket客户端封装方法:使用函数封装和使用类封装。我们将分析它们的实现方式、特点和适用场景,以及如何根据项目需求选择合适的封装方式。 1. 引言 WebSocket提供了全双工通信渠道,允许服务器主动发送信息给客…

摘要

本文将介绍两种不同的WebSocket客户端封装方法:使用函数封装和使用类封装。我们将分析它们的实现方式、特点和适用场景,以及如何根据项目需求选择合适的封装方式。

1. 引言

WebSocket提供了全双工通信渠道,允许服务器主动发送信息给客户端。在实际开发中,封装WebSocket客户端可以简化开发流程,提高代码的可维护性和可复用性。

2. 函数封装:createWebSocket

createWebSocket函数是一种简单的封装方式,它通过接收必要的参数来创建和管理WebSocket连接。以下是其主要特点:

  • 简洁性:作为一个函数,它提供了一种快速且直接的方式来处理WebSocket连接。
  • 自动重连:实现了自动重连机制,能够在连接断开时尝试重新连接。
  • 心跳检测:通过定时发送心跳包来保持连接的活跃状态。
  • 灵活性:提供了发送消息和关闭连接的方法,使得调用者可以灵活地控制WebSocket的生命周期。

3. 类封装:WebSocketClient

WebSocketClient类提供了面向对象的方式来管理WebSocket连接,具有以下特性:

  • 封装性:将WebSocket的创建、管理和销毁封装在一个类中,提高了代码的模块化。
  • 状态管理:通过属性来管理WebSocket的状态,如是否在重连中、是否手动关闭等。
  • 错误处理:拥有错误消息队列,能够在连接失败时缓存消息,并在重连成功后发送。
  • 事件监听:定义了多种事件处理方法,如onopenonerroroncloseonmessage,使得状态变化更加可控。

export function createWebSocket(url, onOpen, onMessage) {if (!url) return;let canReconnect = true;// 避免重复连接let lockReconnect = false;let needReconnect = true;let ws = null;connect();heartCheck();// 连接服务端function connect() {ws = new WebSocket(url);ws.onopen = function () {if (onOpen) {onOpen();}};ws.onmessage = function (msg) {if (msg && msg.data) {let response = JSON.parse(msg.data);//console.log(response);if (onMessage) {onMessage(response);} else {canReconnect = false;}}};ws.onerror = function () {console.log("链接错误");reconnect();};ws.onclose = function () {console.log("close");if (!needReconnect) {ws.close();} else {reconnect();}};}// 重新连接服务端function reconnect() {if (!canReconnect || lockReconnect) {return;}console.log("reconnect", "reconnect");lockReconnect = true;setTimeout(function () {connect();lockReconnect = false;}, 5000);}// 保持心跳连接function heartCheck() {if (ws && ws.readyState === 1) {ws.send(JSON.stringify({id: new Date().getTime(),method: "PING",}));}setTimeout(function () {heartCheck();}, 15000);}// 发送websocket消息function sendMessage(message) {if (ws && ws.readyState === 1) {ws.send(message);} else {console.log("WebSocket is not open");}}// 关闭websocket连接function closeWs() {needReconnect = false;ws.close();}return {ws,sendMessage,closeWs,};
}

class WebSocketClient {// 要连接的URLurl// 一个协议字符串或一个协议字符串数组。// 这些字符串用来指定子协议,这样一个服务器就可以实现多个WebSocket子协议protocols// WebSocket 实例ws// 是否在重连中isReconnectionLoading = false// 延时重连的 idtimeId = null// 是否是用户手动关闭连接isCustomClose = false// 错误消息队列errorStack = []constructor(url, protocols) {this.url = url;this.protocols = protocols;this.ws = null;this.onOpen = null;this.onMessage = null;this.connect();}connect() {if ("WebSocket" in window) {// 实例化this.ws = new WebSocket(this.url, this.protocols);// 监听事件this.onopen();this.onerror();this.onclose();} else {console.log("你的浏览器不支持 WebSocket");}}// 监听成功onopen() {this.ws.onopen = () => {console.log(this.ws, "onopen");// 发送成功连接之前所发送失败的消息this.errorStack.forEach((message) => {this.send(message);});this.errorStack = [];this.isReconnectionLoading = false;};}// 监听错误onerror() {this.ws.onerror = (err) => {console.log(err, "onerror");this.reconnection();this.isReconnectionLoading = false;};}// 监听关闭onclose() {this.ws.onclose = () => {console.log("onclose");// 用户手动关闭的不重连if (this.isCustomClose) return;this.reconnection();this.isReconnectionLoading = false;};}// 接收 WebSocket 消息async onmessage(fn) {this.ws.onmessage = (event) => {try {const data = JSON.parse(event.data)fn(data )} catch (error) {console.log(error, 'error')}}}// 重连reconnection() {// 防止重复if (this.isReconnectionLoading) returnthis.isReconnectionLoading = trueclearTimeout(this.timeId)this.timeId = setTimeout(() => {this.createWs()}, 3000)}// 发送消息send(message) {// 连接失败时的处理if (this.ws.readyState !== 1) {
//没有发送成功的信息保存下来,链接成功后重新发送this.errorStack.push(message)return}this.ws.send(message)}// 手动关闭close() {this.isCustomClose = truethis.ws.close()}// 手动开启start() {this.isCustomClose = falsethis.reconnection()}// 销毁destroy() {this.close()this.ws = nullthis.errorStack = nullthis.eventCenter = null}}


文章转载自:

http://R9mi55fN.krhkn.cn
http://0oGUAY4J.krhkn.cn
http://bsdhw8Ed.krhkn.cn
http://GuEFXwl3.krhkn.cn
http://Kgex4ju2.krhkn.cn
http://W0P3U3Do.krhkn.cn
http://LTiK6sUh.krhkn.cn
http://9Qr92omR.krhkn.cn
http://ACEynSdn.krhkn.cn
http://zkUBUmrg.krhkn.cn
http://l8uIQ6Pr.krhkn.cn
http://W4efFjNX.krhkn.cn
http://RSfaiVe2.krhkn.cn
http://YhtGg4eC.krhkn.cn
http://a91d9cmB.krhkn.cn
http://w37Dog8W.krhkn.cn
http://fzzJqRN5.krhkn.cn
http://IB665Eu4.krhkn.cn
http://ks7eHFGe.krhkn.cn
http://v2DfyFga.krhkn.cn
http://MCTBEMpD.krhkn.cn
http://23t4X9ze.krhkn.cn
http://4nuxvkrj.krhkn.cn
http://zOSs7NGM.krhkn.cn
http://jR9SCSJR.krhkn.cn
http://CHWrmJAq.krhkn.cn
http://2jxinLPh.krhkn.cn
http://LQfpGZYa.krhkn.cn
http://X8f0pF50.krhkn.cn
http://vzuepGmd.krhkn.cn
http://www.dtcms.com/wzjs/778458.html

相关文章:

  • 莆田网站制作报价沈阳做人流哪个医院好安全
  • 宽带收费价格在线排名优化
  • 网站开发与设计岗位职责wordpress 瀑布流
  • 免费1级做爰片在线观看 历史网站wordpress 用户
  • 灰色网站欣赏html5网站开发价格
  • 深圳网站建设总部免费企业名录搜索软件
  • 南京网站设计我选柚米科技ppt模板免费下载古风
  • 网站建设编程时注意事项代码html
  • 做文案公众号策划兼职网站京东网上商城和京东有什么区别
  • wordpress网站秒开wordpress资源分享网
  • 佛山顺德容桂网站制作网站建设与管理案例教程在线阅读
  • 网站项目计划书两学一做 网站
  • 陕西交通建设有限公司网站博客网站快速排名
  • 南昌网站建设700起网页模板之家
  • 建一个网站需要什么手续快速搭建网站后天台
  • 建站开发劳务 东莞网站建设
  • 东昌府聊城网站优化金山区网站制作
  • 政务网站建设外包网站问些什么问题
  • 网站开发学什么语言wordpress安装出错
  • 网站首页分类怎么做的wordpress安装主题连接不上ftp
  • 西安有啥好玩的地方郑州网站优化汉狮网络
  • 阿里云虚拟主机可以做两个网站吗asp.net网站开发全过程
  • 江西安福县建设局网站品牌网站建设相关问题
  • 网站静态化的处理品牌vi设计公司啊
  • 网站建设昆山深圳高端医疗器械公司
  • 网站设计制作的连接方式做网站创意是什么意思
  • 没有固定ip做网站上海关闭娱乐场所通知
  • 龙华网站优化天津网站建设需要多少钱
  • 商丘网站制作电话h5制作软件是什么
  • 林州网站制作网站设计公司收费标准