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

WebSocket 连接频繁断开的问题及解决方案

在这里插入图片描述

文章目录

  • WebSocket 连接频繁断开的问题及解决方案
    • 1. 引言
    • 2. 什么是 WebSocket?
      • 2.1 WebSocket 的优势
      • 2.2 WebSocket 的工作原理
    • 3. WebSocket 连接频繁断开的常见原因
      • 3.1 服务器端问题
        • 3.1.1 服务器负载过高
        • 3.1.2 服务器配置不当
        • 3.1.3 超时设置
      • 3.2 网络问题
        • 3.2.1 网络不稳定
        • 3.2.2 防火墙或代理拦截
      • 3.3 客户端问题
        • 3.3.1 客户端代码错误
        • 3.3.2 浏览器兼容性
        • 3.3.3 资源泄漏
      • 3.4 WebSocket 协议实现问题
    • 4. 诊断 WebSocket 断开问题的方法
      • 4.1 使用浏览器开发者工具
        • 步骤:
      • 4.2 服务器日志分析
        • 关键点:
      • 4.3 网络监控工具
        • 关键点:
    • 5. 解决 WebSocket 连接频繁断开的策略
      • 5.1 优化服务器性能
        • 5.1.1 增加服务器资源
        • 5.1.2 负载均衡
      • 5.2 正确配置 WebSocket 服务器
        • 5.2.1 设置合理的超时时间
        • 5.2.2 实现心跳机制
      • 5.3 处理网络问题
        • 5.3.1 使用稳定的网络
        • 5.3.2 配置防火墙和代理
      • 5.4 改进客户端代码
        • 5.4.1 处理连接断开
        • 5.4.2 实现自动重连机制
        • 5.4.3 管理资源
      • 5.5 使用可靠的 WebSocket 库
    • 6. 示例:实现稳定的 WebSocket 连接
      • 6.1 问题场景
      • 6.2 解决方案
      • 6.3 代码示例
        • 服务器端(Node.js Express)配置
        • 客户端(React)实现自动重连
      • 6.4 验证修复效果
    • 7. 总结

WebSocket 连接频繁断开的问题及解决方案

1. 引言

随着实时应用的普及,如在线聊天、实时数据监控和协作工具,WebSocket 成为了实现双向通信的重要技术。然而,在实际开发中,开发者常常会遇到 WebSocket 连接频繁断开的情况,这不仅影响用户体验,还可能导致数据同步问题。本文将深入探讨 WebSocket 连接频繁断开的常见原因,并提供详细的解决方案和最佳实践,帮助开发者有效地诊断和修复这些问题。

2. 什么是 WebSocket?

2.1 WebSocket 的优势

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。相比传统的 HTTP 请求,WebSocket 具有以下优势:

  • 实时性高:支持实时数据传输,适用于需要即时响应的应用。
  • 双向通信:服务器和客户端都可以主动发送数据,提升交互性。
  • 低开销:建立连接后,数据传输无需重复的 HTTP 头信息,减少网络开销。
  • 持久连接:连接一旦建立,可以长时间保持,避免频繁的连接建立和断开。

2.2 WebSocket 的工作原理

WebSocket 连接通过以下步骤建立:

  1. 握手阶段:客户端发送一个带有 Upgrade: websocket 头的 HTTP 请求,服务器响应一个确认升级协议的响应。
  2. 数据传输阶段:握手成功后,客户端和服务器之间建立一个持久的连接,可以在任意时刻互相发送数据。
  3. 关闭连接:任意一方可以发送关闭帧,终止连接。

3. WebSocket 连接频繁断开的常见原因

3.1 服务器端问题

3.1.1 服务器负载过高

当服务器处理的 WebSocket 连接数量过多时,可能会导致资源耗尽,无法维持所有连接,进而频繁断开连接。

3.1.2 服务器配置不当

服务器的配置参数(如最大连接数、超时时间等)设置不合理,可能导致连接过早断开或无法稳定维持连接。

3.1.3 超时设置

服务器端可能设置了过短的超时时间,导致长时间不活动的连接被自动断开。

3.2 网络问题

3.2.1 网络不稳定

不稳定的网络连接(如频繁的网络切换、信号弱等)会导致 WebSocket 连接中断。

3.2.2 防火墙或代理拦截

某些防火墙或代理服务器可能会拦截或限制 WebSocket 连接,导致连接频繁断开。

3.3 客户端问题

3.3.1 客户端代码错误

客户端代码中存在错误,如未正确处理断开连接的事件,可能导致连接无法稳定维持。

3.3.2 浏览器兼容性

不同浏览器对 WebSocket 的实现存在差异,某些浏览器版本可能存在兼容性问题,导致连接不稳定。

3.3.3 资源泄漏

客户端未能及时释放资源,如未清除事件监听器,可能导致内存占用增加,影响连接稳定性。

3.4 WebSocket 协议实现问题

某些情况下,服务器或客户端对 WebSocket 协议的实现存在缺陷,可能导致连接频繁断开。

4. 诊断 WebSocket 断开问题的方法

4.1 使用浏览器开发者工具

大多数现代浏览器(如 Chrome、Firefox、Safari)都内置了开发者工具,可以帮助开发者监控和调试 WebSocket 连接。

步骤:
  1. 打开开发者工具:按 F12 或右键点击页面选择“检查”。
  2. 切换到 Network 面板:选择 Network
  3. 过滤 WebSocket 连接:在过滤器中选择 WS(WebSocket)。
  4. 查看连接状态:点击具体的 WebSocket 请求,可以查看连接的详细信息,包括发送和接收的数据帧、连接时间等。
  5. 监控断开原因:查看断开时的状态码和关闭原因,帮助定位问题根源。

4.2 服务器日志分析

服务器端的日志记录是诊断 WebSocket 断开问题的重要途径。通过分析日志,可以了解断开连接的具体原因,如错误信息、异常处理等。

关键点:
  • 错误日志:查找与 WebSocket 连接相关的错误信息。
  • 连接统计:分析连接的建立和断开频率,判断是否存在异常模式。
  • 资源使用:监控服务器资源使用情况(如内存、CPU),判断是否因资源耗尽导致连接断开。

4.3 网络监控工具

使用网络监控工具(如 Wireshark、Charles Proxy)可以深入分析 WebSocket 的通信过程,检测网络层面的问题。

关键点:
  • 抓包分析:捕获 WebSocket 的握手过程和数据传输,检查是否存在协议层面的错误。
  • 网络延迟:监控网络延迟和丢包率,判断是否因网络不稳定导致连接断开。
  • 防火墙干扰:检测是否有防火墙或代理服务器干扰 WebSocket 连接。

5. 解决 WebSocket 连接频繁断开的策略

5.1 优化服务器性能

5.1.1 增加服务器资源

确保服务器具备足够的 CPU、内存和网络带宽,能够稳定处理大量的 WebSocket 连接。

5.1.2 负载均衡

使用负载均衡器(如 Nginx、HAProxy)分摊 WebSocket 连接负载,避免单一服务器过载。

5.2 正确配置 WebSocket 服务器

5.2.1 设置合理的超时时间

根据应用需求,合理设置 WebSocket 服务器的超时时间,避免过早断开连接。

// Node.js (Express) 示例
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080, clientTracking: true });server.on('connection', ws => {ws.isAlive = true;ws.on('pong', () => {ws.isAlive = true;});
});// 心跳机制,定期检测连接是否存活
const interval = setInterval(() => {server.clients.forEach(ws => {if (!ws.isAlive) return ws.terminate();ws.isAlive = false;ws.ping(null, false, true);});
}, 30000);server.on('close', () => {clearInterval(interval);
});
5.2.2 实现心跳机制

通过定期发送心跳消息(如 ping/pong)检测连接是否仍然活跃,及时断开失效连接。

5.3 处理网络问题

5.3.1 使用稳定的网络

尽量在稳定的网络环境下运行应用,减少网络波动对 WebSocket 连接的影响。

5.3.2 配置防火墙和代理

确保服务器的防火墙和代理服务器允许 WebSocket 的通信,避免拦截或限制 WebSocket 连接。

5.4 改进客户端代码

5.4.1 处理连接断开

在客户端代码中,监听 WebSocket 的 onclose 事件,了解连接断开的原因,并采取相应的处理措施。

const socket = new WebSocket('wss://example.com/socket');socket.onclose = (event) => {console.log(`WebSocket closed: ${event.code} - ${event.reason}`);// 根据需要重新连接或提示用户
};
5.4.2 实现自动重连机制

在连接断开时,自动尝试重新建立连接,确保应用的实时性。

function createWebSocket() {const socket = new WebSocket('wss://example.com/socket');socket.onopen = () => {console.log('WebSocket connection established');};socket.onmessage = (event) => {console.log('Received data:', event.data);};socket.onclose = (event) => {console.log(`WebSocket closed: ${event.code} - ${event.reason}`);// 设置重连间隔setTimeout(createWebSocket, 5000);};socket.onerror = (error) => {console.error('WebSocket error:', error);socket.close();};
}// 启动 WebSocket 连接
createWebSocket();
5.4.3 管理资源

确保客户端在不需要 WebSocket 连接时,及时关闭连接,释放资源。

function closeWebSocket() {if (socket.readyState === WebSocket.OPEN) {socket.close();}
}// 在适当的时候调用关闭函数,如用户退出页面
window.addEventListener('beforeunload', closeWebSocket);

5.5 使用可靠的 WebSocket 库

选择成熟、稳定的 WebSocket 库,可以减少因库本身问题导致的连接断开。例如:

  • Socket.IO:提供自动重连、事件命名空间等高级功能。
  • ws:适用于 Node.js 的高性能 WebSocket 实现。
  • ReconnectingWebSocket:专门用于实现自动重连机制的客户端库。
// 使用 ReconnectingWebSocket 实现自动重连
import ReconnectingWebSocket from 'reconnecting-websocket';const options = {connectionTimeout: 1000,maxRetries: 10,
};const socket = new ReconnectingWebSocket('wss://example.com/socket', [], options);socket.addEventListener('open', () => {console.log('WebSocket connection established');
});socket.addEventListener('message', (event) => {console.log('Received data:', event.data);
});socket.addEventListener('close', (event) => {console.log(`WebSocket closed: ${event.code} - ${event.reason}`);
});socket.addEventListener('error', (error) => {console.error('WebSocket error:', error);
});

6. 示例:实现稳定的 WebSocket 连接

6.1 问题场景

假设在一个实时聊天应用中,用户发现 WebSocket 连接频繁断开,导致消息无法及时接收或发送。开发者需要诊断并解决这一问题,确保聊天功能的实时性和稳定性。

6.2 解决方案

通过以下步骤,诊断并解决 WebSocket 连接频繁断开的问题:

  1. 检查服务器端性能和配置:确保服务器资源充足,正确配置超时时间和心跳机制。
  2. 优化客户端代码:实现自动重连机制,正确处理连接断开事件,避免资源泄漏。
  3. 监控网络环境:确保网络稳定,配置防火墙和代理以支持 WebSocket 通信。
  4. 使用可靠的 WebSocket 库:选择成熟的库,减少因库本身问题导致的连接不稳定。

6.3 代码示例

服务器端(Node.js Express)配置
// server/index.js
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const app = express();const server = http.createServer(app);
const wss = new WebSocket.Server({ server });// 心跳机制,检测连接是否存活
wss.on('connection', (ws) => {ws.isAlive = true;ws.on('pong', () => {ws.isAlive = true;});ws.on('message', (message) => {console.log(`Received message: ${message}`);// 广播消息给所有客户端wss.clients.forEach((client) => {if (client.readyState === WebSocket.OPEN) {client.send(message);}});});
});// 定期发送 ping,检测连接是否存活
const interval = setInterval(() => {wss.clients.forEach((ws) => {if (!ws.isAlive) return ws.terminate();ws.isAlive = false;ws.ping();});
}, 30000);wss.on('close', () => {clearInterval(interval);
});server.listen(8080, () => {console.log('Server is listening on port 8080');
});
客户端(React)实现自动重连
// client/src/App.js
import React, { useEffect, useState } from 'react';function App() {const [messages, setMessages] = useState([]);const [socket, setSocket] = useState(null);useEffect(() => {let ws;let reconnectInterval = 5000; // 重连间隔const connectWebSocket = () => {ws = new WebSocket('ws://localhost:8080');ws.onopen = () => {console.log('WebSocket connected');};ws.onmessage = (event) => {const message = event.data;setMessages((prev) => [...prev, message]);};ws.onclose = (event) => {console.log(`WebSocket closed: ${event.code} - ${event.reason}`);// 自动重连setTimeout(() => {connectWebSocket();}, reconnectInterval);};ws.onerror = (error) => {console.error('WebSocket error:', error);ws.close();};setSocket(ws);};connectWebSocket();// 清理函数,关闭连接return () => {if (ws) ws.close();};}, []);const sendMessage = (msg) => {if (socket && socket.readyState === WebSocket.OPEN) {socket.send(msg);} else {console.warn('WebSocket is not open');}};return (<div><h1>实时聊天应用</h1><div>{messages.map((msg, index) => (<p key={index}>{msg}</p>))}</div><button onClick={() => sendMessage('Hello Server!')}>发送消息</button></div>);
}export default App;

6.4 验证修复效果

  1. 启动服务器

    node server/index.js
    
  2. 启动客户端

    使用 React 启动应用,确保 WebSocket 连接建立成功。

  3. 测试连接稳定性

    • 发送和接收消息,观察连接是否稳定。
    • 模拟网络中断,观察客户端是否自动重连。
    • 检查服务器日志,确保连接和断开事件正常记录。
  4. 监控资源使用

    使用浏览器开发者工具和服务器监控工具,确保内存和 CPU 使用情况正常,无明显泄漏或过载。

7. 总结

WebSocket 连接频繁断开是前端实时应用中常见的问题,可能由服务器端配置、网络环境、客户端代码等多方面原因引起。通过理解 WebSocket 的工作原理,识别常见断开原因,并采用合理的诊断和解决策略,开发者可以有效地提升应用的实时性和稳定性。关键措施包括优化服务器性能、正确配置 WebSocket 服务器、处理网络问题、改进客户端代码以及使用可靠的 WebSocket 库。遵循这些最佳实践,可以显著减少 WebSocket 连接断开的频率,确保用户获得流畅的实时交互体验。

相关文章:

WebSocket 连接频繁断开的问题及解决方案

文章目录 WebSocket 连接频繁断开的问题及解决方案1. 引言2. 什么是 WebSocket&#xff1f;2.1 WebSocket 的优势2.2 WebSocket 的工作原理 3. WebSocket 连接频繁断开的常见原因3.1 服务器端问题3.1.1 服务器负载过高3.1.2 服务器配置不当3.1.3 超时设置 3.2 网络问题3.2.1 网…...

[CSP篇] CSP2024 游记(上)

Part.0 前言 在刚刚过去的 CSP-J2024 以及 CSP-S2024 中&#xff0c;不知大家十分用自己最好的状态参加了这次重要的测试&#xff0c;取得了令自己努力的成绩呢&#xff1f; 文章发布在 2024 年 11 月 1 日&#xff0c;距离出结果还有 3 − 5 3-5 3−5 天&#xff0c;如有需…...

Mac “屏幕保护程序启动或显示器关闭后需要密码“无效

屏幕保护程序启动或显示器关闭后需要密码只能选择“立即”的解决方法&#xff1a; 在 iPhone mirror中设置&#xff0c;每次询问权限。 参考&#xff1a;https://support.apple.com/en-us/120421...

架构师之路-学渣到学霸历程-35

Nginx的配置文件说明 nginx的学习&#xff0c;到了关键的部分&#xff0c;其实想要学好nginx就一定要了解配置文件&#xff1b;我们看看配置文件是怎么样的&#xff1f; 1、nginx的配置文件路径 不同的安装方式、nginx的配置文件路径也有所不同 源码安装配置文件路径&#…...

2024-10月的“冷饭热炒“--解读GUI Agent 之computer use?phone use?——多模态大语言模型的应用进阶之路

GUI Agent 之computer use&#xff1f;phone use?——多模态大语言模型的进阶之路 1.最新技术事件浅析三、思考和方案设计工具代码部分1.提示词2.工具类API定义&#xff0c;这里主要看computer tool就够了 总结 本文会总结概括这一应用的利弊&#xff0c;然后给出分析和工具代…...

sheng的学习笔记-AI基础-激活函数

ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 Sigmoid Tanh 函数 ReLU&#xff08;Rectified Linear Unit&#xff09;函数 Leaky ReLU ELU&#xff08;Exponential Linear Unit&#xff09; SEIU Swish 激活函数的选择 激活函数&#xff08;Activation F…...

重构代码之重复的观察数据

在代码重构中&#xff0c;重复的观察数据 是一种模式&#xff0c;指的是系统中存在多处对同一数据的观察或记录&#xff0c;使得数据需要在多处维护&#xff0c;导致了数据同步的困难和维护成本的增加。这种重复通常会引起以下几个问题&#xff1a; 数据不一致&#xff1a;由于…...

SpringBoot【实用篇】- 热部署

文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候&#xff0c;我们必须在代码修改完后再重启程序&#xff0c;程序才会同步你修改的信息。如果我们想快速查…...

C语言 核心语法2

时间&#xff1a;2024.11.1 一、学习内容 1、计算机的存储规则 1.1存储规则 视频是图片和声音的结合体。 在计算机中&#xff0c;任意数据都是以二进制的形式进行存储的。 在计算机中&#xff0c;二进制可以表示万事万物。 1.2十进制 1.3二进制的运算过程 1.4文本存储 …...

【论文阅读】Real-ESRGAN

学习资料 论文题目&#xff1a;Real-ESRGAN&#xff1a;使用纯合成数据训练真实世界的盲超分辨率&#xff08;Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data&#xff09;论文地址&#xff1a;IEEE Xplore 全文 PDF&#xff1a;代码&#…...

安达发|零部件APS车间排程系统销售预测的优点

2024制造业面临着前所未有的挑战与机遇。为了保持竞争力&#xff0c;企业必须确保其生产系统能够高效、灵活地运作。在这方面&#xff0c;采用高级计划与排程系统&#xff0c;特别是零部件APS车间排程系统的预测方法&#xff0c;已成为提升生产效率和响应能力的关键策略。这种系…...

Android 同花顺面经

Android 同花顺面经 文章目录 Android 同花顺面经一面 一面 Android组件化搭建使用接口层路由有什么缺点&#xff1f; 如果更改接口的话&#xff0c;其他的依赖的moudle都得改 说说kotlin和java的区别&#xff1f; Java是支持面向对象的编程&#xff0c;Kotlin是支持面向对象支…...

搜维尔科技:Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用

Manus数据手套在水下捕捉精确的手指动作&#xff0c; 可以在有水的条件下使用 搜维尔科技&#xff1a;Manus数据手套在水下捕捉精确的手指动作&#xff0c; 可以在有水的条件下使用...

网络:IP分片和组装

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识&#xff0c;3位标志&#xff0c;13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…...

Oracle dblink创建使用

1、首先要有创建Database Link 的权限。可通过语句查看当前用户是否有权限&#xff1a; SELECT * FROM USER_SYS_PRIVS;如果没有权限&#xff0c;使用系统管理员用户登陆后给当前用户授权&#xff1a; GRANT CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK TO user;…...

Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification

Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification Neurips 24 推荐指数&#xff1a; #paper/⭐⭐⭐#​ 摘要 我们的研究结果表明&#xff0c;由于GNN中的超参数设置次优&#xff0c;之前报道的GT的优越性可能被夸大了。值得注意的是&#xff…...

Android 字节飞书面经

Android 字节飞书面经 文章目录 Android 字节飞书面经一面二面 一面 1. 线程是进程的一部分&#xff0c;一个线程只能属于一个进程&#xff0c;而一个进程可以有多个线程&#xff0c;但至少有一个线程。 2. 根本区别&#xff1a;进程是操作系统资源分配的基本单位&#xff0c;…...

选择好友窗口(三)

选择好友窗口&#xff08;三&#xff09; 前言 在前两集我们就完成了整个左半部分的内容了&#xff0c;那么我们这一集开始就要完成我们的选择好友窗口的右侧部分。 需求分析 我们要做出的效果如下图 可以看到我们整个布局是一个网格的布局&#xff0c;当然也可以做成一个垂…...

【含文档】基于ssm+jsp的音乐播放系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

【C语言】动态内存开辟

写在前面 C语言中有不少开辟空间的办法&#xff0c;但是在堆上开辟的方法也就只有动态内存开辟&#xff0c;其访问特性与数组相似&#xff0c;但最大区别是数组是开辟在栈上&#xff0c;而动态内存开辟是开辟在堆上的。这篇笔记就让不才娓娓道来。 PS:本篇没有目录实在抱歉CSD…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据&#xff0c;随后读取数据&#xff0c;通过ReportLab生成横向PDF表格&#xff0c;包含格式化&#xff08;两位小数&#xff09;及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...