【MCP Node.js SDK 全栈进阶指南】中级篇(1):MCP动态服务器高级应用
前言
在初级篇中,我们已经掌握了MCP TypeScript-SDK的基础知识,包括开发环境搭建、基础服务器开发、资源开发、工具开发、提示模板开发以及传输层配置等核心内容。随着我们对MCP的理解不断深入,是时候进入更高级的应用场景了。
MCP的一个强大特性是其动态性,能够在运行时根据需求变化动态调整服务器的行为和功能。这种动态性使MCP应用能够适应复杂多变的业务需求,提供更加灵活和强大的服务。在本篇文章中,我们将深入探讨MCP动态服务器的高级应用,包括运行时服务器功能修改、动态工具与资源管理、状态变化通知机制以及实际应用案例分析。
通过学习本篇内容,你将能够构建更加灵活、智能和可扩展的MCP应用,充分发挥MCP动态服务器的潜力。让我们一起进入MCP中级篇的学习之旅,探索MCP动态服务器的高级应用技巧!
1. 动态服务器基础与架构
在深入探讨动态服务器的高级应用之前,我们需要先了解MCP动态服务器的基础概念和架构设计。
1.1 MCP动态服务器的核心概念
MCP动态服务器是指能够在运行时动态修改其功能、资源和工具的服务器实例。与传统的静态服务器相比,动态服务器具有以下特点:
- 运行时可重配置:无需重启即可动态添加、删除或修改服务器功能
- 状态感知:能够感知系统状态变化并作出相应调整
- 适应性强:能够根据环境变化和用户需求自适应调整行为
- 可扩展性高:支持通过插件或模块动态扩展功能
MCP提供了丰富的API和事件机制,使开发者能够构建真正的动态服务器。
1.2 动态服务器的架构设计
MCP动态服务器通常采用模块化的架构设计,主要包括以下核心组件:
- 核心服务器:提供基本的服务器功能和API
- 动态资源管理器:负责资源的动态注册、更新和移除
- 动态工具管理器:负责工具的动态注册、更新和移除
- 状态管理系统:维护服务器状态并支持状态变更通知
- 事件总线:提供组件间通信和事件传递机制
- 插件系统:支持动态加载和卸载插件
以下是一个简化的动态服务器架构图:
+-------------------------------------------+
| MCP动态服务器 |
|-------------------------------------------|
| |
| +-------------+ +---------------+ |
| | 核心服务器 |<----->| 状态管理系统 | |
| +-------------+ +---------------+ |
| ^ ^ |
| | | |
| v v |
| +-------------+ +---------------+ |
| | 动态资源 |<----->| 事件总线 | |
| | 管理器 | | | |
| +-------------+ +---------------+ |
| ^ ^ |
| | | |
| v v |
| +-------------+ +---------------+ |
| | 动态工具 |<----->| 插件系统 | |
| | 管理器 | | | |
| +-------------+ +---------------+ |
| |
+-------------------------------------------+^ ^| |v v+------------+ +---------------+| 客户端应用 | | 外部服务/API |+------------+ +---------------+
1.3 从静态服务器到动态服务器
在初级篇中,我们主要构建的是静态MCP服务器,所有的资源和工具都是在启动前预先定义的。而动态服务器允许在运行时按需添加、移除或修改这些组件。
以下是静态服务器和动态服务器在代码结构上的对比:
静态服务器示例:
import { McpServer } from '@mcp/server';
import { z } from 'zod';// 创建静态服务器
const server = new McpServer();// 启动前注册所有工具和资源
server.registerTool({name: 'calculator',description: '执行基本的数学计算',parameters: z.object({operation: z.string().describe('要执行的操作'),a: z.number().describe('第一个数字'),b: z.number().describe('第二个数字')}),handler: async ({ operation, a, b }) => {// 工具实现...}
});server.registerTemplate('greeting', 'Hello, {{name}}!');// 启动服务器
server.start();
动态服务器示例:
import { McpServer } from '@mcp/server';
import { z } from 'zod';// 创建动态服务器
const server = new McpServer();// 启动服务器
server.start();// 服务器启动后动态注册工具
setTimeout(() => {server.registerTool({name: 'calculator',description: '执行基本的数学计算',parameters: z.object({operation: z.string().describe('要执行的操作'),a: z.number().describe('第一个数字'),b: z.number().describe('第二个数字')}),handler: async ({ operation, a, b }) => {// 工具实现...}});console.log('动态注册了计算器工具');
}, 5000);// 根据条件动态注册资源
function registerGreetingIfNeeded(language) {if (language === 'en') {server.registerTemplate('greeting', 'Hello, {{name}}!');} else if (language === 'zh') {server.registerTemplate('greeting', '你好,{{name}}!');}console.log(`已为${language}语言动态注册问候模板`);
}// 响应外部事件动态注册资源
process.on('message', (msg) => {if (msg.type === 'register_greeting') {registerGreetingIfNeeded(msg.language);}
});
从以上对比可以看出,动态服务器的关键在于其能够在任何时刻响应内部或外部事件,动态调整其功能配置。
2. 运行时服务器功能修改
MCP服务器提供了丰富的API,使开发者能够在运行时动态修改服务器的各种功能。本节将探讨如何在运行时动态修改服务器的各种配置和行为。
2.1 动态调整服务器配置
MCP服务器的许多配置项可以在运行时动态调整,而无需重启服务器。这使得应用可以根据负载、用户需求和环境变化进行自适应调整。
以下是一个动态调整服务器配置的示例:
import { McpServer } from '@mcp/server';const server = new McpServer({serviceConfig: {name: 'Dynamic MCP Server',version: '1.0.0',description: '一个动态可配置的MCP服务器'},// 初始配置maxRequestSize: 1024 * 1024, // 1MBconcurrency: 5,timeout: 30000
});// 启动服务器
await server.start();// 访问和修改配置
console.log('当前最大请求大小:', server.config.maxRequestSize);
console.log('当前并发限制:', server.config.concurrency);// 根据系统负载动态调整配置
function adjustConfigBasedOnLoad() {const systemLoad = getSystemLoad(); // 假设的函数,获取系统负载if (systemLoad > 0.8) {// 高负载情况下,降低并发和超时时间server.updateConfig({concurrency: 3,timeout: 15000});console.log('负载过高,调整为保守配置');} else if (systemLoad < 0.3) {// 低负载情况下,提高并发server.updateConfig({concurrency: 10,timeout: 60000});console.log('负载较低,调整为激进配置');} else {// 正常负载,使用默认配置server.updateConfig({concurrency: 5,timeout: 30000});console.log('负载正常,使用默认配置');}
}// 定期检查并调整配置
setInterval(adjustConfigBasedOnLoad, 60000);// 暴露API以允许管理员手动调整配置
server.registerTool({name: 'updateServerConfig',description: '更新服务器配置',parameters: z.object({maxRequestSize: z.number().optional(),concurrency: z.number().optional(),timeout: z.number().optional()}),handler: async (params) => {server.updateConfig(params);return { success: true, newConfig: server.config };}
});
在这个示例中,服务器会根据系统负载自动调整配置,同时也提供了一个工具让管理员能够手动调整配置。
2.2 动态更新服务元数据
服务器的元数据(如名称、版本、描述等)也可以在运行时动态更新:
import { McpServer } from '@mcp/server';const server = new McpServer({serviceConfig: {name: 'Dynamic Service',version: '1.0.0',description: '初始描述'}
});await server.start();// 动态更新服务元数据
function updateServiceInfo(newVersion) {server.updateServiceConfig({version: newVersion,description: `更新于 ${new Date().toISOString()}`,// 可以添加其他元数据metadata: {lastUpdated: Date.now(),updateChannel: process.env.UPDATE_CHANNEL || 'stable'}});console.log(`服务元数据已更新至版本 ${newVersion}`);
}// 模拟版本升级
setTimeout(() => {updateServiceInfo('1.0.1');
}, 10000);setTimeout(() => {updateServiceInfo('1.0.2');
}, 20000);// 提供API查询当前服务信息
server.registerTool({name: 'getServiceInfo',description: '获取当前服务信息',parameters: z.object({}),handler: async () => {return server.serviceConfig;}
});
通过动态更新服务元数据,可以实现版本迭代、功能发布和维护公告等功能,而无需重启服务器。
2.3 动态中间件管理
MCP HTTP传输层支持动态添加和移除中间件,这使得可以在运行时调整请求处理管道:
import { McpServer, HttpTransport } from '@mcp/server';
import { rateLimit } from 'express-rate-limit';// 创建HTTP传输
const transport = new HttpTransport({port: 3000
});// 创建服务器
const server = new McpServer({ transport });await server.start();// 动态添加速率限制中间件
function enableRateLimit(maxRequests = 100, windowMs = 15 * 60 * 1000) {const limiter = rateLimit({windowMs,max: maxRequests,message: '请求过于频繁,请稍后再试'});// 为所有请求添加速率限制transport.use(limiter);console.log(`已启用速率限制: ${maxRequests}请求/${windowMs}毫秒`);// 返回中间件引用,以便后续移除return limiter;
}// 动态移除中间件
function disableMiddleware(middleware) {transport.remove(middleware);console.log('已禁用中间件');
}// 根据流量动态调整中间件
let currentLimiter = null;function adjustMiddlewareBasedOnTraffic() {const currentTraffic = getCurrentTraffic(); // 假设的函数if (currentTraffic > 1000) {// 高流量情况if (currentLimiter) {disableMiddleware(currentLimiter);}currentLimiter = enableRateLimit(50, 15 * 60 * 1000); // 更严格的限制} else if (currentTraffic < 100) {// 低流量情况if (currentLimiter) {disableMiddleware(currentLimiter);currentLimiter = null; // 完全移除限制}} else {// 中等流量if (currentLimiter) {disableMiddleware(currentLimiter);}currentLimiter = enableRateLimit(100, 15 * 60 * 1000); // 默认限制}
}// 定期检查并调整中间件
setInterval(adjustMiddlewareBasedOnTraffic, 5 * 60 * 1000);
通过动态管理中间件,可以实现自适应的流量控制、安全防护和请求处理策略。
2.4 运行时功能开关
在大型应用中,常常需要实现功能开关(Feature Flags),以便在运行时启用或禁用某些功能。MCP提供了灵活的机制来实现这一点:
import { McpServer } from '@mcp/server';
import { z } from 'zod';// 功能开关管理器
class FeatureFlagManager {private flags: Map<string, boolean> = new Map();private server: McpServer;constructor(server: McpServer) {this.server = server;// 注册默认功能开关this.flags.set('advanced_search', false);this.flags.set('streaming_response', true);this.flags.set('experimental_tools', false);// 注册功能开关管理工具this.registerFeatureFlagTools();}// 检查功能是否启用isEnabled(flagName: string): boolean {return this.flags.get(flagName) || false;}// 设置功能开关状态setFeatureFlag(flagName: string, enabled: boolean): void {this.flags.set(flagName, enabled);// 根据功能开关状态动态调整服务器this.applyFeatureFlagChanges(flagName, enabled);console.log(`功能 "${flagName}" ${enabled ? '已启用' : '已禁用'}`);}// 应用功能开关变更private applyFeatureFlagChanges(flagName: string, enabled: boolean): void {switch (flagName) {case 'advanced_search':if (enabled) {this.registerAdvancedSearchTools();} else {this.unregisterAdvancedSearchTools();}break;case 'streaming_response':// 调整服务器是否使用流式响应this.server.updateConfig({useStreaming: enabled});break;case 'experimental_tools':if (enabled) {this.registerExperimentalTools();} else {this.unregisterExperimentalTools();}break;}}// 注册功能开关管理工具private registerFeatureFlagTools(): void {this.server.registerTool({name: 'getFeatureFlags',description: '获取所有功能开关状态',parameters: z.object({}),handler: async () => {return Object.fromEntries(this.flags);}});this.server.registerTool({name: 'setFeatureFlag',description: '设置功能开关状态',parameters: z.object({flagName: z.string().describe('功能开关名称'),enabled: z.boolean().describe('是否启用')}),handler: async ({ flagName, enabled }) => {this.setFeatureFlag(flagName, enabled);return { success: true, flagName, enabled };}});}// 注册高级搜索工具private registerAdvancedSearchTools(): void {// 实现高级搜索工具的注册...}// 注销高级搜索工具private unregisterAdvancedSearchTools(): void {// 实现高级搜索工具的注销...}// 注册实验性工具private registerExperimentalTools(): void {// 实现实验性工具的注册...}// 注销实验性工具private unregisterExperimentalTools(): void {// 实现实验性工具的注销...}
}// 创建服务器
const server = new McpServer();
await server.start();// 初始化功能开关管理器
const featureFlagManager = new FeatureFlagManager(server);// 定期从配置服务拉取功能开关配置
async function syncFeatureFlags() {try {const response = await fetch('https://config-service.example.com/feature-flags');const flags = await response.json();for (const [flagName, enabled] of Object.entries(flags)) {featureFlagManager.setFeatureFlag(flagName, enabled as boolean);}console.log('功能开关配置已同步');} catch (error) {console.error('同步功能开关失败:', error);}
}// 初始同步
syncFeatureFlags();// 定期同步
setInterval(syncFeatureFlags, 5 * 60 * 1000);
通过实现功能开关管理器,可以实现灰度发布、A/B测试和紧急功能控制等高级应用场景。
3. 动态工具与资源管理
MCP服务器的核心功能是提供工具和资源。在动态服务器中,我们需要能够在运行时动态管理这些工具和资源,以适应不断变化的需求。
3.1 动态工具注册与更新
MCP允许在服务器运行时动态注册、更新和移除工具。这为扩展服务器功能提供了极大的灵活性。
动态注册工具
import { McpServer } from '@mcp/server';
import { z } from 'zod'
相关文章:
【MCP Node.js SDK 全栈进阶指南】中级篇(1):MCP动态服务器高级应用
前言 在初级篇中,我们已经掌握了MCP TypeScript-SDK的基础知识,包括开发环境搭建、基础服务器开发、资源开发、工具开发、提示模板开发以及传输层配置等核心内容。随着我们对MCP的理解不断深入,是时候进入更高级的应用场景了。 MCP的一个强大特性是其动态性,能够在运行时…...
LM35 温度传感器介绍
【本文基于Arduino项目】 1. LM35 温度传感器简介 LM35 是一款 精密模拟温度传感器,由德州仪器(TI)推出,具有线性输出、无需校准、低功耗等特点,广泛应用于环境监测、工业控制等领域。 主要特性 参数规格测量范围-…...
【网络应用程序设计】实验一:本地机上的聊天室
个人博客:https://alive0103.github.io/ 代码在GitHub:https://github.com/Alive0103/XDU-CS-lab 能点个Star就更好了,欢迎来逛逛哇~❣ 主播写的刚够满足基本功能,多有不足,仅供参考,还请提PR指正ÿ…...
Cursor 设置规则
文章目录 1、一个可以参考的网站-各种语言都有2、正向设置规则通过 符号还可以引用子规则 3、逆向设置规则 1、一个可以参考的网站-各种语言都有 https://cursor.directory/rules 2、正向设置规则 注意,最开始规则设置已经作废(下图下面的红框&#…...
人工智能-模型评价与优化(过拟合与欠拟合,数据分离与混淆矩阵,模型优化,实战)
欠拟合与过拟合 模型不合适,导致其无法与数据实现有效预测 欠拟合可以通过观察训练数据及时发现,通过优化模型结果解决 过拟合的原因: 1、模型结构过于复杂(维度太高) 2、使用了过多属性,模型训练时包含了…...
Python爬虫从入门到实战详细版教程
Python爬虫从入门到实战详细版教程 文章目录 Python爬虫从入门到实战详细版教程书籍大纲与内容概览第一部分:爬虫基础与核心技术1. 第1章:[爬虫概述](https://blog.csdn.net/qq_37360300/article/details/147431708?spm=1001.2014.3001.5501)2. 第2章:HTTP协议与Requests库…...
Java多线程编程初阶指南
目录 一.线程基础概念 线程是什么? 线程与进程对比 为啥要有线程 二.线程实现方式 继承Thread类 实现Runnable接口 常规实现方式 匿名内部类写法 Lambda表达式写法(Java8) 对比总结 三.Thread 类及常见方法 核心功能 核心构造方…...
Qt信号槽连接的三种方法对比
信号槽连接方法对比 1. 直接连接2. 集中管理3.函数指针初始化列表后期需要disconnect 对比 1. 直接连接 connect(codeWindow, &CodeEditorWindow::SetBaseLineSignal, monitoringWindow, &MonitoringWindow::SetBaseLineSlot),connect(&ButtonTree::Instance(), &a…...
健康生活新指南
在 “朋克养生” 与 “躺平焦虑” 并存的时代,真正的健康生活无需刻意 “内卷”。这几个简单又实用的养生妙招,能让你在忙碌日常中悄悄升级健康状态,轻松拥抱活力人生。 一、饮食:吃对食物,给身体 “加 Buff” 别…...
IF=24.5 靶向MMP9治疗协同提高抗PD1疗效
Targeted MMP9 therapy synergistically improves anti-PD1 efficacy CTNNB1GOF(The gain of function (GOF) CTNNB1 mutations,功能获得型CTNNB1突变)在肝细胞癌(HCC)中,已被证明与免疫排斥相关࿰…...
基于SpringBoot的中华诗词文化分享平台-项目分享
基于SpringBoot的中华诗词文化分享平台-项目分享 项目介绍项目摘要管理员功能图会员功能图系统功能图项目预览会员主页面诗词页面发布问题回复评论 最后 项目介绍 使用者:管理员、会员 开发技术:MySQLJavaSpringBootVue 项目摘要 本文旨在设计与实现一…...
SQLiteDatabase 增删改查(CRUD)详细操作
文章目录 1. 初始化数据库2. 插入数据 (Create)方法一:使用 ContentValues insert()方法二:直接执行SQL 3. 查询数据 (Read)方法一:使用 query() 方法方法二:使用 rawQuery() 执行原始SQL 4. 更新数据 (Update)方法一:…...
从 0 到 1 打通 AI 工作流:Dify+Zapier 实现工具自动化调用实战
一、引言:当 AI 遇到工具孤岛 在企业数字化转型的浪潮中,AI 工具的应用早已从单一的对话交互进阶到复杂的业务流程自动化。但开发者常常面临这样的困境:本地开发的 MCP 工具(如 ERP 数据清洗脚本、CRM 工单系统 API)如…...
第四届商师校赛 web 1
RceMe ezGame 伪装 Ping Are you from SQNU? Look for the homepage Through 根据题目慢慢试 File_download Post上传得到下载文件 反编译一下 /* * Decompiled with CFR 0.152. * * Could not load the following classes: * javax.servlet.http.HttpServlet */ …...
SSH 互信被破坏能导致 RAC 异常关闭吗
一、 SSH 互信和 RAC 的关系 1、SSH 互信对 RAC 的作用 Oracle 11g R2 在安装 Grid Infrastructure 的时候,能够通过安装程序配置节 点间的 SSH 用户等效性,之所以要在安装之前配置 SSH 用户等效性,是为了能 够在安装前使用 C…...
工程投标k值分析系统(需求和功能说明)
1 需求总括 2 企业管理模块: 新增、删除、修改企业/部门 <...
Qt-托盘的实现
文章目录 托盘的功能QSystemTrayIcon 类QSystemTrayIcon类的常用函数代码实现 托盘的功能 GUI 程序,如果想要实现当最小化时,程序从任务栏消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通过双击或者菜单使程序…...
【人脸识别】百度人脸识别H5方案对接
经调研,百度的人脸识别使用场景比较广泛且准确率较高,项目上有用到,这里做一下记录,整体对接没有难度,按照文档操作就行。 一、准备工作 1、需要注册百度云开放平台(企业资质)注册指南 2、创…...
用Qt和deepseek创建自己的问答系统
如果你不想花钱调用deepseek,试试下面的方法。 1: 访问 OpenRouter: https://openrouter.ai 2: 搜索 DeepSeek-R1 (free) 要使用这个免费模型,你需要: (1)注册 OpenRouter 账户并获取 API 密钥 访问 …...
飞搭系列 | 组件增加标记,提升用户体验
前言 Preface 飞搭低代码平台(FeiDa,以下简称“飞搭”),为企业提供在线化、灵活的业务应用构建工具,支持高低代码融合,助力企业低门槛、高效率和低成本地快速应对市场变化,加速复杂业务场景落地…...
布隆过滤器的应用
布隆过滤器虽然看起来是一个“算法结构”,但在实际 Web 应用场景中用途非常广泛,尤其在 提升性能、节省资源、防御攻击 等方面非常有用。 缓存穿透保护(常见于 Redis) 📌 问题: 用户频繁请求一些数据库中…...
云原生--基础篇-4--CNCF-1-云原生计算基金会(云原生生态发展和目标)
1、CNCF定义与背景 云原生计算基金会(Cloud Native Computing Foundation,CNCF)是由Linux基金会于2015年12月发起成立的非营利组织,旨在推动云原生技术的标准化、开源生态建设和行业协作。其核心目标是通过开源项目和社区协作&am…...
(16)VTK C++开发示例 --- 转换文件格式
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 此示例演示如何读取文件,然后将其写入不同类型的文件。 在此示例中,我们读取一个 vtp 文件并…...
离线-DataX
基本介绍 DataX 是阿里云 DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台,它是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源…...
深度学习-全连接神经网络-3
七、过拟合与欠拟合 在训练深层神经网络时,由于模型参数较多,在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合,提升模型的泛化能力(对新数据表现良好)和鲁棒性(对异常数据表现良好)。 1. 概念认知 …...
基于javaweb的SSM+Maven教材管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
DCL介绍
一.dcl-介绍 一.案例 1.查询用户 USE mysql; select * from user; 2.权限控制...
mysql日常巡检
1.查看mysql服务是否异常 systemctl status mysql_3306 查看MySQL进程是否存在 ps -ef | grep mysql 2.连接异常检查 (1)查看是否异常连接 show processlist; #或 show full processlist; (2)查看当前失败连接数 show global status like aborted_connects; (3)查看试…...
Cursor这类编程Agent软件的模型架构与工作流程
开发|界面|引擎|交付|副驾——重写全栈法则:AI 原生的倍速造应用流 来自全栈程序员 nine 的探索与实践,持续迭代中。 欢迎评论私信交流。 最近在关注和输出一系列 AIGC 架构。 模型架构与工作流程 大语…...
记录:扩展欧几里得算法
本文遵循 CC BY-NC-ND 4.0 协议,作者: U•ェ•*U \texttt{U•ェ•*U} U•ェ•*U,转载请获得作者授权。 前置知识 裴蜀定理/贝祖定理:若 a , b a,b a,b 是整数,且 gcd ( a , b ) d \gcd(a,b)d gcd(a,b)d…...
学习笔记——《Java面向对象程序设计》-抽象和接口
参考教材: Java面向对象程序设计(第3版)微课视频版 清华大学出版社 抽象方法 抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。 抽象方法的定义格式如下: abstract void 方法名称…...
MySQL中根据binlog日志进行恢复
MySQL中根据binlog日志进行恢复 排查 MySQL 的 binlog 日志问题及根据 binlog 日志进行恢复的方法一、引言二、排查 MySQL 的 binlog 日志问题(一)确认 binlog 是否开启(二)查找 binlog 文件位置和文件名模式(三&#…...
数据库sql语句 中 GROUP BY 关键字详解及字段要求
GROUP BY 关键字详解及字段要求 GROUP BY 的核心作用 将查询结果按指定字段分组,常与聚合函数(如 COUNT, SUM, AVG 等)结合使用,对分组后的数据进行统计计算。 GROUP BY 后字段的要求 非聚合字段必须出现在 GROUP BY 子句中&…...
数据集 | 柑橘果目标检测数据集
文章目录 一、数据集概述1.1 数据标注实例1.2 数据集技术规格 二、样本类别详解2.1 树上柑橘样本2.2 树下柑橘样本 三、标注工具四、数据下载地址 一、数据集概述 在农业智能化领域,柑橘果园的自动化监测与管理一直面临着几个关键挑战: 果实定位准确性…...
Arduino示例代码讲解:Project 11 - Crystal Ball 水晶球
Arduino示例代码讲解:Project 11 - Crystal Ball 水晶球 Project 11 - Crystal Ball 水晶球程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数读取倾斜开关状态:检测状态变化:保存状态:运行过程注意事项Project 11 - Crystal Ball 水晶球 /…...
Redis—为何持久化使用子进程
AOF重写以及bgsave的时候为什么采用fork子进程而不是子线程? 进程间内存隔离 独立的内存空间:子进程拥有与主进程独立的内存空间,确保即使在重写过程中发生崩溃或错误,也不会影响主进程的运行和内存状态。 数据安全性ÿ…...
Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
Vue3 Vite TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码 ExcelJS生成文档并导出导出表头其他函数 生成水印设置文档的背景水印dom 转图片插入图片全部代码 ExcelJS 读取&#…...
VulnHub-DarkHole_1靶机渗透教程
VulnHub-DarkHole_1靶机渗透教程 1.靶机部署 [Onepanda] Mik1ysomething 靶机下载:https://download.vulnhub.com/darkhole/DarkHole.zip 直接使用VMware打开就行 导入成功,打开虚拟机,到此虚拟机部署完成! 注意:…...
Python设计模式:对象池
1. 什么是对象池设计模式? 对象池设计模式是一种创建型设计模式,主要用于管理和复用对象,以提高性能和资源利用率。它通过维护一个对象的集合(池),来避免频繁地创建和销毁对象,从而减少内存分配…...
【上海大学数据库原理实验报告】MySQL数据库的C/S模式部署
实验目的 掌握Linux环境下MySQL数据库的安装、初始化和基本配置。通过配置MySQL的网络通信,熟悉数据库的远程访问机制及其安全性要求。 实验内容 在腾讯云上租借两台服务器,打开3306端口以允许MySQL远程访问。 图 1 租到的服务器可在控制台观察其状态…...
deepseek快速生成简历
目录 一、需求二、模板例子 三、生成简历四、其他说明 一、需求 现在我准备跳槽到一家公司,这家公司已经发布了招聘需求,现在你想跳槽到这家公司,我们可以利用deepseek快速生成符合这家公司的简历内容。 二、模板 我们要进行指令明确的结构…...
什么是机器视觉3D无序堆叠抓取
机器视觉3D无序堆叠抓取是一种结合三维视觉感知、人工智能算法和机器人控制的技术,旨在从杂乱无序堆叠的物体中识别、定位并抓取目标物体。该技术广泛应用于工业自动化(如物流分拣、装配制造)、仓储管理、食品加工等领域,解决了传统二维视觉或固定规则堆叠场景下的抓取难题…...
Shell脚本中的字符串截取和规则变化
文章目录 前言if通配符判断if判断多个条件规则变化字符串的两个示例改变中间段数字改变末尾段数字 总结 前言 科技的发展会带来习惯的改变,特别是对于我们这批敲代码的,之前还积累一些奇巧淫技,想着在必要的时候卖弄一下,自从生成…...
云账号安全事件应急响应指南:应对来自中国IP的异常访问
在当今数字化时代,云服务已成为企业IT基础设施的核心。然而,随之而来的安全挑战也日益突出。本文将详细介绍当发现云账号被来自中国的IP地址异常利用时,应如何快速有效地响应,以确保账户安全并最小化潜在风险。 1. 确认异常活动 首先,我们需要确认是否真的发生了安全事件…...
python番外
#作者:允砸儿 #日期:乙巳青蛇年 三月廿五 在开始数据库的分享之前笔者简单写以下关于python的番外。笔者这块可能写的不是很好csdn上面有很多大佬,笔者仅以自己的思维和想法与大家分享以下。 安装必看 笔者在这里贴一个网址https://www.…...
Jetson Orin NX 16G 配置GO1强化学习运行环境
这一次收到了Jrtson Orin NX, 可以进行部署了。上一次在nano上的失败经验 Jetson nano配置Docker和torch运行环境_jetson docker-CSDN博客 本次的目的是配置cuda-torch-python38环境离机运行策略。 Jetson Orin NX SUPER 1. 烧录镜像 参考链接在ubuntu系统中安装sdk manag…...
Embedding与向量数据库__0422
thinking:做一个项目 1,业务背景,价值 2,方法,工具 3,实践(现有的代码,改写的代码) cursor编程有个cursor settings ->privacy mode隐私模式,但是只要连上…...
正向代理和反向代理
正向代理和反向代理是两种在不同场景下使用的代理技术,它们有以下区别: 目标和作用 正向代理 目标 :主要是为客户端服务,帮助客户端去访问外部网络资源。例如,企业内部网络中的员工可能需要访问互联网,但直…...
Android JNI开发中头文件引入的常见问题与解决方案,提示:file not found
Android JNI开发中头文件引入的常见问题与解决方案 问题场景(新手易犯错误) 假设你在开发一个JNI项目,想要实现一个线程安全的队列(SafeQueue),于是直接在cpp目录下创建了safe_queue.h文件,并开…...
三网通电玩城平台系统结构与源码工程详解(二):Node.js 服务端核心逻辑实现
本篇文章将聚焦服务端游戏逻辑实现,以 Node.js Socket.io 作为主要通信与逻辑处理框架,展开用户登录验证、房间分配、子游戏调度与事件广播机制的剖析,并附上多个核心代码段。 一、服务端文件结构概览 /server/├── index.js …...