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

实现websocket心跳检测,断线重连机制

WebSocket基础

WebSocket概念

WebSocket是一种革命性的 全双工通信协议 ,构建在TCP之上,旨在简化客户端与服务器之间的数据交换过程。通过单次握手建立持久连接,WebSocket实现了真正的双向实时通信,显著提高了交互效率。这一特性使其成为开发实时应用的理想选择,特别适用于 在线聊天、实时游戏、数据推送和远程监控 等场景。相较于传统HTTP轮询方式,WebSocket不仅降低了网络带宽消耗,还大幅提升了数据传输速度和实时性,为现代Web应用提供了更加高效可靠的通信解决方案。

WebSocket生命周期

WebSocket连接的生命周期包括三个关键阶段:建立、数据传输和关闭。这个过程体现了WebSocket作为一种高效的双向通信协议的特点:

  1. 建立阶段 :通过HTTP升级请求完成握手过程,确立持久连接。

  2. 数据传输阶段 :客户端和服务器均可主动发起数据交换,实现真正的全双工通信。

  3. 关闭阶段 :任一方可通过发送特定的关闭帧来终止连接,确保资源的优雅释放。

这种机制使WebSocket成为实现实时互动应用的理想选择,有效减少了通信延迟并提高了数据传输效率。

心跳检测机制

心跳检测原理

心跳检测机制是WebSocket长连接技术中的核心组成部分,其原理基于定期发送和接收心跳包来维持连接的活性。这种机制不仅能有效防止连接因闲置而被意外断开,还能及时发现和处理异常情况,从而提高系统的稳定性和可靠性。

心跳检测的工作流程通常遵循以下步骤:

  1. 客户端发起连接 :客户端通过WebSocket协议建立与服务器的长连接。

  2. 定期发送心跳包 :客户端按照预设的频率(如每5秒)向服务器发送心跳消息。

  3. 服务器响应 :服务器接收到心跳消息后,立即回发一个响应,表明连接仍然活跃。

  4. 超时处理 :如果服务器在规定时间内未收到心跳消息,会触发超时机制,可能关闭连接或尝试重新建立。

心跳检测的重要性体现在多个方面:

  • 维持长连接 :防止因网络层的空闲超时而意外断开连接。

  • 及时发现异常 :快速检测到网络故障或服务器崩溃等情况。

  • 优化资源利用 :允许服务器清理无效连接,释放资源。

  • 保障服务质量 :确保连接始终保持可用状态,提升用户体验。

在实现心跳检测时,需要权衡几个关键因素:

  • 心跳频率 :平衡检测精度和网络负载。

  • 超时时间 :考虑网络延迟和服务器响应时间。

  • 重试机制 :应对短暂的网络波动。

通过合理配置这些参数,可以构建一个既高效又可靠的心跳检测机制,为WebSocket长连接提供坚实的基础。

心跳包设计

在WebSocket长连接技术中,心跳包的设计是维持连接稳定性和可靠性的重要环节。本节将详细介绍心跳包的结构、内容和发送频率的选择,为开发者提供实用的实现指南。

心跳包是WebSocket通信中用于检测连接状态的小型数据包。它们通常包含简单的标识符或消息,用于确认连接的活性。设计合理的心跳包机制可以有效防止连接因闲置而被意外断开,同时也能及时发现和处理异常情况。

心跳包的设计主要包括以下几个方面:

  1. 结构和内容

  • 使用标准的WebSocket帧格式

  • 包含特定的操作码(如PING或自定义操作码)

  • 可能包含简单的标识符或序列号

  1. 发送频率

  • 根据应用需求和网络环境进行权衡

  • 通常范围:5-30秒

  • 考虑因素:网络延迟、服务器负载、电池寿命(移动设备)

  1. 超时处理

  • 设置适当的超时阈值

  • 超时阈值 > 发送频率

  • 超时后的动作:断开连接或触发重连机制

  1. 优化策略

  • 使用二进制数据帧减少带宽消耗

  • 采用自适应算法动态调整频率

  • 结合ACK机制提高效率

通过精心设计的心跳包机制,可以有效维持WebSocket连接的长期稳定性,同时最小化对网络和服务器资源的影响。这种机制在实时通信应用中扮演着至关重要的角色,确保了连接的可靠性和连续性。

超时处理

在WebSocket长连接技术中,超时处理是心跳检测机制的核心组成部分。合理的超时处理策略不仅能有效检测连接状态,还能在异常情况下及时采取行动,确保系统的稳定性和可靠性。

超时处理主要涉及以下几个关键方面:

  1. 超时阈值设置

  • 基于心跳包发送频率

  • 典型值:心跳频率的1.5-2倍

  • 示例:心跳频率为30秒,超时阈值为45-60秒

  1. 超时检测机制

  • 使用定时器监测

  • 触发条件:超过预设阈值未收到响应

  • 动作:断开当前连接

  1. 重试策略

  • 引入指数退避算法

  • 初始重连间隔:1-2秒

  • 后续重连间隔逐步增加:2^N秒(N为尝试次数)

  1. 最大重试次数限制

  • 避免无限循环重连

  • 建议值:3-5次

  • 达到上限后:停止尝试,通知用户或采取其他措施

  1. 异常情况处理

  • 检测网络波动

  • 区分临时性故障和持续性故障

  • 临时性故障:短时间重试

  • 持续性故障:暂停重连,通知用户

通过合理设置这些参数和机制,可以构建一个既能及时发现异常又能避免过度消耗资源的心跳超时处理方案。这种策略能够在保持连接稳定性的同时,最大限度地减少不必要的网络负担和服务器压力。

断线重连机制

断线检测

在WebSocket长连接技术中,断线检测是维护连接稳定性的关键环节。为了准确识别WebSocket连接是否断开,我们需要结合多种方法来全面监控连接状态。本节将详细介绍两种主要的断线检测机制:网络状态监听和心跳超时判断。

网络状态监听

网络状态监听是通过监听浏览器的在线/离线事件来判断网络连接的变化。这种方法的优势在于能够快速感知网络环境的变化,特别是在用户切换网络或重新连接Wi-Fi等场景下。具体实现如下:

window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);function updateOnlineStatus(event) {if (navigator.onLine) {console.log('网络已连接');// 检查WebSocket连接状态checkWebSocketConnection();} else {console.log('网络已断开');// 断开WebSocket连接disconnectWebSocket();}
}

然而,网络状态监听也有其局限性。由于WebSocket基于TCP协议,TCP连接并不能敏锐地感知网络层的变化,因此在网络重新连接后,需要额外的机制来判断WebSocket连接是否仍然可用。

心跳超时判断

心跳超时判断是另一种常用的断线检测方法。它通过定期发送心跳包并在接收方回应的方式来维持连接的有效性。这种方法虽然不如网络状态监听那样迅速,但能覆盖更多复杂的场景,特别是当网络环境相对稳定但服务器出现问题时。

心跳超时判断的基本实现如下:

var heartCheck = {timeout: 3000,timeoutObj: null,serverTimeoutObj: null,start: function(){var self = this;this.timeoutObj && clearTimeout(this.timeoutObj);this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);this.timeoutObj = setTimeout(function(){ws.send("ping");self.serverTimeoutObj = setTimeout(function(){ws.close();}, self.timeout)}, this.timeout)}
}ws.onmessage = function (event) {// 每次收到消息时重置心跳检测heartCheck.start();
}

在实际应用中,通常会结合使用这两种方法来提高断线检测的准确性。例如,在网络状态由离线转为在线时,可以立即发送一次心跳包来快速检测连接状态。同时,持续的心跳超时判断机制可以作为长期监控连接状态的主要手段。

通过综合运用这些断线检测机制,我们可以构建一个更加健壮和可靠的WebSocket长连接系统,有效应对各种复杂的网络环境和服务器状况。

重连策略

在WebSocket长连接技术中,重连策略是确保连接稳定性和可靠性的重要组成部分。合理的重连策略不仅能有效应对网络波动,还能避免过度消耗资源。本节将详细介绍重连策略的关键要素及其实施细节。

重连策略的核心在于确定合适的重连时机、间隔以及最大重试次数。这些参数的设置需要在连接成功率和系统资源利用率之间寻找平衡点。

重连时机

重连时机的选择通常基于以下几种情况:

  1. 连接关闭事件 :当WebSocket触发onclose事件时,这是最明显的重连时机。

  2. 心跳超时 :如果服务器在预定时间内未收到心跳包响应,可视为连接失效。

  3. 网络状态变化 :监听浏览器的online/offline事件,当网络重新连接时尝试重连。

重连间隔

重连间隔的设置直接影响系统的性能和用户体验。一种常用的方法是采用 指数退避算法 。这种方法随着重连次数的增加,重连间隔呈指数级增长。例如:

let retryCount = 0;
const maxRetry = 5;
const baseDelay = 1000; // 1秒function attemptReconnect() {if (retryCount < maxRetry) {const delay = Math.min(baseDelay * Math.pow(2, retryCount), 30000); // 最大30秒setTimeout(() => {retryCount++;connectWebSocket();}, delay);} else {console.log('Exceeded maximum retry limit.');}
}

这种策略有助于减轻服务器的压力,同时给予网络恢复的机会。然而,需要注意的是,过长的重连间隔可能导致用户体验下降。因此,在实际应用中,还需要根据具体情况进行调整。

最大重试次数

设置最大重试次数是为了防止无限重连导致资源浪费。通常,可以将最大重试次数设置为3-5次。当达到最大重试次数后,可以采取以下措施:

  1. 显示错误提示给用户

  2. 记录详细的日志以便后续分析

  3. 提供手动重连的选项

通过合理设置这些参数,可以构建一个既能有效应对网络波动,又能避免过度消耗资源的重连策略。在实际应用中,还需要根据具体的业务需求和网络环境不断调整和优化这些参数,以达到最佳的效果。

重连实现

在WebSocket长连接技术中,断线重连机制是确保连接稳定性和可靠性的重要组成部分。本节将详细介绍重连实现的关键方面,包括状态管理、错误处理和恢复机制。

重连实现的核心在于设计一个能够有效处理连接中断并自动恢复的系统。这个系统需要考虑多个方面,以确保在各种复杂网络环境下都能保持良好的连接质量。

状态管理

状态管理是重连机制的基础。一个典型的状态管理模型包括以下几种状态:

状态

描述

CONNECTED

正常连接状态

DISCONNECTED

连接已断开

RECONNECTING

正在尝试重连

这种状态模型可以帮助我们清晰地区分连接的不同阶段,并在每个阶段执行相应的操作。例如,当处于RECONNECTING状态时,可以阻止新的连接请求,避免重复连接。

错误处理

错误处理是重连机制中的关键环节。一个有效的错误处理策略应该能够区分暂时性错误和永久性错误,并采取不同的应对措施。例如:

function handleWebSocketError(error) {if (isTemporaryError(error)) {// 尝试重连startReconnectAttempt();} else {// 永久性错误,通知用户或采取其他措施alertUserOfPermanentFailure();}
}

这里的关键是能够准确识别错误类型。对于暂时性错误,可以设置一个重连计时器,在适当的时间间隔后尝试重新连接。而对于永久性错误,可能需要采取更激进的措施,如通知用户或切换到备用服务器。

恢复机制

恢复机制是确保重连成功后的关键步骤。一个完整的恢复机制应该包括以下几个方面:

  1. 重建连接 :重新建立WebSocket连接是最基本的步骤。

  2. 恢复会话状态 :重连后可能需要重新认证或恢复会话状态。

  3. 重发未完成的消息 :对于需要保证消息完整性的情况,可能需要重新发送之前未完成的消息。

  4. 同步数据 :如果在断线期间有数据更新,可能需要进行数据同步。

通过这些机制,可以最大程度地减少断线带来的影响,确保服务的连续性和数据的完整性。

在实际应用中,还需要考虑一些特殊情况的处理,如:

  1. 避免重连风暴 :通过设置合理的重连间隔和最大重连次数,可以防止在短时间内大量重连请求对服务器造成过大压力。

  2. 优雅降级 :在多次重连失败后,可以考虑降级到其他通信方式,如HTTP轮询,以维持最基本的服务。

  3. 用户体验优化 :在重连过程中,应向用户提供明确的提示,避免让用户产生误解。

通过这些细致的设计和实现,可以构建一个强大而可靠的WebSocket断线重连机制,为实时通信应用提供坚实的保障。

实现示例

客户端实现

在WebSocket长连接技术的实际应用中,客户端实现是一个关键环节。本节将详细介绍如何在前端使用JavaScript实现心跳检测和断线重连机制。

一个典型的客户端实现通常包括以下几个关键部分:

  1. WebSocket实例创建

const ws = new WebSocket('ws://example.com/socket');
  1. 事件监听器设置

ws.onopen = () => {console.log('WebSocket连接已打开');
};ws.onmessage = (event) => {console.log('收到服务器消息:', event.data);
};ws.onclose = () => {console.log('WebSocket连接已关闭');reconnect();
};ws.onerror = (error) => {console.error('WebSocket发生错误:', error);
};
  1. 心跳检测实现

let heartbeatTimer;function startHeartbeat() {heartbeatTimer = setInterval(() => {ws.send(JSON.stringify({ type: 'heartbeat' }));}, HEARTBEAT_INTERVAL);
}function stopHeartbeat() {clearInterval(heartbeatTimer);
}
  1. 断线重连机制

const MAX_RECONNECT_TRIES = 5;
let reconnectTries = 0;function reconnect() {if (reconnectTries < MAX_RECONNECT_TRIES) {reconnectTries++;setTimeout(() => {ws = new WebSocket('ws://example.com/socket');startHeartbeat();}, RECONNECT_DELAY);} else {console.error('达到最大重连次数,停止重连');}
}

在这个实现中,我们使用了一个简单的计数器reconnectTries来跟踪重连尝试的次数。每次重连失败后,都会增加计数器的值。当计数器达到预设的最大重连次数MAX_RECONNECT_TRIES时,将停止重连尝试,避免无限循环。

值得注意的是,重连延迟时间RECONNECT_DELAY采用了递增策略。这意味着每次重连失败后,等待的时间都会逐渐增加。这种策略有助于减轻服务器的压力,同时给予网络恢复的机会。

此外,心跳检测的实现也非常重要。通过定期发送心跳包,我们可以有效地检测连接的状态,并在必要时触发重连机制。心跳包的具体内容可以根据应用的需求进行定制,但通常包含一个简单的类型标识,如:

{type: 'heartbeat'
}

这种结构使得服务器能够轻松识别心跳包,并做出相应的响应。

通过这种方式,我们可以构建一个健壮的WebSocket客户端,能够有效应对网络波动和服务器故障,确保长连接的稳定性和可靠性。

服务端实现

在WebSocket长连接技术的实现中,服务端的角色至关重要。本节将详细介绍如何在Node.js环境中实现服务端的心跳检测和断线重连机制。

服务端实现的核心在于正确处理客户端发送的心跳包,并在适当时候触发重连机制。以下是一个使用Node.js和ws库的示例代码:

const WebSocket = require('ws');const wss = new WebSocket.Server({ port: 8080 });wss.on('connection', (ws) => {console.log('客户端已连接...');ws.isAlive = true; // 添加存活标志ws.on('pong', () => {ws.isAlive = true; // 收到pong响应后重置存活标志});ws.on('message', (data) => {const message = JSON.parse(data);if (message.type === 'heartbeat') {ws.send(JSON.stringify({ type: 'heartbeatResponse' })); // 响应心跳包} else {// 处理其他类型的普通消息console.log(`收到客户端发送的消息: ${data}`);}});ws.on('close', () => {console.log('客户端已断开连接');});
});setInterval(() => {wss.clients.forEach((client) => {if (client.isAlive === false) return client.terminate(); // 断开不活跃的连接client.isAlive = false; // 重置存活标志client.ping(() => {}); // 发送ping包});
}, 30000); // 每30秒检查一次

这段代码展示了如何实现服务端的心跳检测机制:

  1. 为每个连接的WebSocket实例添加isAlive属性,用于标记连接的活跃状态。

  2. 使用ws.on('pong')事件处理器来更新isAlive标志,确保在接收到客户端响应后及时重置超时计时器。

  3. 通过ws.on('message')事件处理器来处理不同类型的消息。对于心跳消息,服务端只需简单地发送一个响应。

  4. 使用setInterval()函数定期检查所有连接的活跃状态。对于超过规定时间未响应的连接,服务端将主动断开。

这种实现方式有几个优点:

  • 灵活性 :服务端可以根据实际情况灵活调整心跳检测的频率和超时时间。

  • 资源优化 :通过定期清理不活跃的连接,可以有效降低服务器资源占用。

  • 错误处理 :通过主动断开不活跃的连接,可以避免潜在的错误累积。

在处理断线重连请求时,服务端需要关注以下几点:

  1. 连接管理 :维护一个活动连接列表,便于管理和监控。

  2. 状态恢复 :为重新连接的客户端恢复之前的会话状态。

  3. 负载均衡 :在高并发场景下,考虑使用负载均衡技术分散连接压力。

通过合理实现服务端的心跳检测和断线重连机制,可以显著提高WebSocket长连接的稳定性和可靠性,为实时通信应用提供强大的技术支持。

优化与注意事项

性能优化

在WebSocket长连接技术的应用中,性能优化是一个关键考量因素。为了减少心跳包对网络和服务器负载的影响,可以采用以下策略:

  1. 自适应心跳频率 :根据连接活跃度动态调整心跳间隔,非活跃期延长间隔,活跃期缩短间隔。

  2. 压缩心跳数据 :使用二进制帧或gzip压缩减少传输量。

  3. 批量处理 :合并多个小数据包成一个大数据包发送,减少频繁的网络往返。

  4. 智能超时机制 :结合网络质量和历史响应时间设置动态超时阈值。

这些优化措施能在保证连接稳定性的同时,显著降低网络带宽消耗和服务器处理负荷,提高整体系统性能。

安全考虑

在实现WebSocket心跳和重连机制时,安全问题是不容忽视的关键因素。为确保系统的安全性和稳定性,需重点关注以下方面:

  1. 身份验证 :每次重连时都应进行严格的用户身份验证,防止非法接入。

  2. 加密保护 :使用TLS/SSL加密传输通道,保护敏感信息。

  3. DDoS防护 :设置合理的重连频率限制,避免恶意攻击。

  4. 会话管理 :维护安全的会话状态,防止会话劫持。

  5. 权限控制 :根据用户角色分配访问权限,确保数据安全。

通过实施这些安全措施,可以在实现长连接功能的同时,有效防范潜在的安全风险,保障系统的整体安全性和可靠性。

跨平台兼容

在WebSocket长连接技术的跨平台实现中,确保一致性和兼容性至关重要。考虑到不同浏览器和设备可能存在差异,可采用以下策略:

  1. 标准化API调用 :统一使用WebSocket构造函数和事件处理程序,确保核心功能的一致性。

  2. 错误处理适配 :针对不同平台的特定错误码进行差异化处理。

  3. polyfill支持 :为旧版浏览器提供兼容层,确保广泛兼容性。

  4. 设备特性优化 :针对移动设备优化心跳频率,平衡电量消耗和连接稳定性。

  5. 网络状态监听 :结合Navigator.onLine API和Network Information API,提高断线检测的准确性。

通过这些策略,可在多样化的环境中实现稳定可靠的WebSocket长连接,确保应用的一致体验。

相关文章:

实现websocket心跳检测,断线重连机制

WebSocket基础 WebSocket概念 WebSocket是一种革命性的 全双工通信协议 &#xff0c;构建在TCP之上&#xff0c;旨在简化客户端与服务器之间的数据交换过程。通过单次握手建立持久连接&#xff0c;WebSocket实现了真正的双向实时通信&#xff0c;显著提高了交互效率。这一特性…...

ComfyUI节点安装笔记

AI高速发展&#xff0c;版本更新相当快&#xff08;11月25日才安装的版本v.0.3.4&#xff0c;27日版本就已经更新到v.0.3.5了&#xff09;&#xff0c;在遇到问题&#xff0c;找到问题原因所在的过程中&#xff0c;ComfyUI版本、python版本、节点对环境版本的依赖&#xff0c;本…...

深度学习,训练集准确率高,但验证集准确率一直不上升,很低的问题

在训练过程中&#xff0c;训练集的准确率稳步上升&#xff0c;但是验证集的准确率一直在40%左右徘徊&#xff0c;从网上搜索可能的原因有&#xff1a; 1、学习率太小&#xff0c;陷入局部最优。 2、数据量太小&#xff08;4000多条数据&#xff0c;应该还可以吧&#xff09; …...

【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 1、switch 结构基本语法 2、示例代码及解释 3、使用注意事项 4、判断闰年的条件 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;编写程序实现&#xff1a;从键盘上输入一个年月日&#xff08;以空格或回车…...

Lumos学习王佩丰Excel二十四讲系列完结

“Lumos学习王佩丰Excel二十四讲系列”是一套完整的Excel教程&#xff0c;涵盖了从基础到高级的各种知识和技能。是我亲自一个个码出来的教程哇&#xff01;&#xff01;&#xff01; 一、课程概览 该教程共分为24讲&#xff0c;每一讲都围绕Excel的一个核心主题进行深入讲解…...

前后端规约

文章目录 引言I 【强制】前后端交互的 API请求内容响应体响应码II 【推荐】MVC响应体III【参考】IV 其他引言 服务器内部重定向必须使用 forward;外部重定向地址必须使用 URL 统一代理模块生成,否则会因线上采用 HTTPS 协议而导致浏览器提示“不安全”,并且还会带来 URL 维护…...

【数据可视化】数据可视化看板需求梳理模板(含示例)

一、模板 设计一个数据可视化看板需要从多个方面梳理需求&#xff0c;以确保看板能够有效地传达信息并满足用户的需求。以下是一些关键方面&#xff1a; 1.目标和受众 ● 明确目标&#xff1a;确定看板的主要目的&#xff0c;例如监控业务指标、分析市场趋势、展示项目进度等…...

CArray原理是什么,通过示例来展示如何使用?

CArray是MFC&#xff08;Microsoft Foundation Class&#xff09;库中的一个模板类&#xff0c;用于实现动态数组的功能。它类似于C语言中的数组&#xff0c;但具有自动增长和缩小的能力&#xff0c;从而方便管理动态数据。以下是对CArray原理的解析以及一个使用示例。 CArray…...

更换WordPress主题的基础知识及注意事项

更换WordPress主题是优化和升级网站的重要步骤&#xff0c;不仅能够增强网站的视觉效果&#xff0c;还能改进用户体验并提高网站性能。然而&#xff0c;在进行该操作时&#xff0c;必须格外谨慎&#xff0c;避免数据丢失或功能失调的风险。本文将介绍在更换主题前需要采取的基本…...

springcloud篇3-docker需熟练掌握的知识点

docker的原理请参考博文《Docker与Kubernetes》。 一、安装docker的指令 1.1 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken补充&#xff1a;配置镜像源 注意&#xff1a; yum安装是在线联网下载安装&#xff0c;而很多的资源…...

基于单片机的直流稳压电源的设计(论文+源码)

1.系统方案设计 在本次直流稳压电源的设计中&#xff0c;其关键指标如下&#xff1a; 系统输入电压220V交流系统输出直流0到12V可调&#xff0c;步进可以达到0.1V电流最大输出可以到2A具有短路保护功能可以通过液晶或者数码管等显示设备显示当前输出电压 2. 电路图...

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…...

解锁 C 语言字符函数密码,开启高效编程之路

文章目录 一、字符函数的构成二、字符函数的分类1、字符分类函数1、isalnum函数2、isalpha函数3、isdigit函数4、islower函数5、isupper函数6、ispunct函数7、isspace函数8、iscntrl函数9、isxdigit函数10、isgraph函数11、isprint函数 2、字符转换函数 三、字符函数的应用 一、…...

LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库

一、必备条件&#xff1a; python语言Neo4j数据库python库&#xff1a;neo4j、llmsherpa、glob、dotenv 二、代码&#xff1a; from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...

力扣-数组-01两数之和

解析 遍历i和第i1&#xff0c;两个for循环查就可以&#xff0c;时间复杂度是 代码 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ansewer;bool flag false;for(int i 0;i < nums.size(); i){for(in…...

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…...

保障移动应用安全:多层次安全策略应对新兴威胁

在数字化时代&#xff0c;移动应用的安全问题变得越来越重要。随着网络威胁的不断升级&#xff0c;确保移动应用的安全性不仅是保护敏感数据的关键&#xff0c;也是维护用户信任的基础。为了应对复杂的安全挑战&#xff0c;企业必须采取先进的技术和多层次的安全策略&#xff0…...

【Linux】函数

一、函数 1、创建函数 如果定义了同名函数&#xff0c;则新定义的函数就会覆盖原先的定义的函数&#xff0c;而且在运行时不会报错。 创建函数的语法&#xff1a; 方法1&#xff1a;使用关键字function function name { commands } shell脚本中的函数名不能重复 方法2&#x…...

Maven中管理SNAPSHOT版本含义及作用

在开发过程中突然产生了一个疑问&#xff1a;IDEA中 maven deploy的依赖包的版本号,比如 1.0.0-SNAPSHOT是在哪配置的&#xff1f;在远程仓库中的版本和这个有关系吗 &#xff1f; 在 Maven 中&#xff0c;-SNAPSHOT 后缀是用于标识项目版本为快照&#xff08;Snapshot&#xf…...

win10 VS2019上libtorch库配置过程

win10 VS2019上libtorch库配置过程 0 引言1 获取libtorch2 在VS上配置使用libtorch库3 结语 0 引言 &#x1f4bb;&#x1f4bb;AI一下&#x1f4bb;&#x1f4bb;   libtorch库是一个用于深度学习的C库&#xff0c;是PyTorch的官方C前端。它提供了用于构建和训练深度学习模…...

AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)

导语 5月份QECon深圳大会已经结束&#xff0c;继续更新一下案例拆解&#xff0c;本期是来自顺丰科技。 文末附完整版材料获取方式。 首先来看一下这个案例的核心内容&#xff0c;涵盖了测四用例设计、CI/CD辅助、测试执行、监控预警四大方面&#xff0c;也是算大家比较熟悉的…...

网络安全厂商F5推出AI Gateway,化解大模型应用风险

AI正以前所未见的速度重塑数字化体验。然而&#xff0c;企业在加速落地现代化数字体验的过程中&#xff0c;其在保障和交付AI应用方面仍面临严峻挑战。这些应用需处理海量数据&#xff0c;涉及复杂流量模式&#xff0c;并引入更高级的安全威胁&#xff0c;而企业当前的安全能力…...

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)

在填充 PDF 中的图形时&#xff08;以及许多其他技术中&#xff09;&#xff0c;你可以选择使用 Even-Odd&#xff08;奇偶&#xff09; 或 Non-Zero&#xff08;非零&#xff09; 填充规则。 对于那些已经在想“你在说啥&#xff1f;”的朋友&#xff0c;别担心&#xff0c;我…...

分布式锁-Redisson实现

目录 本地锁的局限性 Redisson解决分布式锁问题 在分布式环境下&#xff0c;分布式锁可以保证在多个节点上的并发操作时数据的一致性和互斥性。分布式锁有多种实现方案&#xff0c;最常用的两种方案是&#xff1a;zookeeper和redis&#xff0c;本文介绍redis实现分布式锁方案…...

Ubuntu 系统部署 MySQL 入门篇

一、安装 MySQL 1.1 更新软件包 在终端中执行以下命令&#xff0c;更新系统软件包列表&#xff0c;确保安装的是最新版本的软件&#xff1a; sudo apt update 1.2 安装 MySQL 执行以下命令安装 MySQL 服务端&#xff1a; sudo apt install mysql-server 在安装过程中&…...

CLIP多模态大模型的优势及其在边缘计算中的应用

CLIP多模态大模型的优势及其在边缘计算中的应用 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型&#xff0c;是OpenAI开发的一种多模态大模型。该模型通过对比学习的方式&#xff0c;在大规模图像-文本对上进行预训练&#xff0c;成功实现了图像和文…...

【信息系统项目管理师-选择真题】2025上半年(第二批)综合知识答案和详解(回忆版)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

Zookeeper 和 Kafka 版本与 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …...

Redis底层数据结构之深入理解跳表(2)

上一篇文章中我们详细讲述了跳表的增添、查找和修改的操作&#xff0c;这篇文章我们来讲解一下跳表在多线程并发时的安全问题。在Redis中&#xff0c;除了网络IO部分和大文件的后台复制涉及到多线程外&#xff0c;其余任务执行时全部都是单线程&#xff0c;这也就意味着在Redis…...

Figma 中构建 Master Control Panel (MCP) 的完整设计方案

以下是在 Figma 中构建 Master Control Panel (MCP) 的完整设计方案&#xff0c;专为设计系统管理而优化&#xff1a; 一、MCP 核心功能架构 #mermaid-svg-iZAnYxyYU4BtpeaE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merma…...