【人工智能agent】--dify通过mcp协议调用工具
MCP Client
发起工具调用的实体,也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口(工具节点)来请求服务。
MCP Server / Host
提供实际服务的端点。在这个例子中,就是模拟 API 服务器 上的各个API (/api/pump/status, /api/cmms/pump/history 等)。这个服务器理解工具调用背后转换成的 HTTP 请求并返回数据。
Dify 平台
扮演着协议转换器、编排器和代理的角色。它接收来自 Client (工作流节点) 的标准化工具调用请求,根据工具的 Schema 定义,将其转换为具体的 HTTP 请求发送给 Server/Host (你的 API),接收响应,再将其作为工具节点的输出返回给工作流。
目录
1.MCP-Server通信服务
2.Dify调用MCP协议
3.案例
3.1.高德地图MCP服务
3.2.Zapier MCP服务
3.3.如何自定义MCP工具
1.MCP-Server通信服务
以下是MCP(Microcontroller Protocol)中SSE(Server-Sent Events)与STDIO(Standard Input/Output)通信模式的对比
特性 | STDIO(标准输入/输出) | SSE(服务器推送事件) |
---|---|---|
通信方向 | 双向(客户端↔服务器) | 单向(服务器→客户端) |
传输方式 | 本地进程间通信(通过 stdin/stdout/stderr ) | 基于 HTTP 长连接(text/event-stream ) |
延迟 | 极低(无网络开销) | 依赖网络延迟(需 TCP/IP 握手) |
多客户端支持 | 仅单会话(1客户端:1服务器) | 支持多客户端(1服务器:N客户端) |
部署复杂度 | 无需网络配置(本地进程直接调用) | 需 HTTP 服务端(如 Nginx、云服务) |
安全性 | 高(仅限本地进程) | 需 HTTPS/TLS 加密防中间人攻击 |
适用场景 |
|
|
扩展性 | 差(依赖本地资源) | 强(支持负载均衡和横向扩展) |
2.Dify调用MCP协议
mcp协议github官网:python-sdk/examples/clients/simple-chatbot/.python-version at main · modelcontextprotocol/python-sdk · GitHub
dify官网文档解析:dify-plugin-tools-mcp_sse/tools/mcp_list_tools.py at main · junjiem/dify-plugin-tools-mcp_sse · GitHub
直接在市场搜索安装插件:
MCP SSE提供两个功能:
- mcp_sse_list_tools:获取工具列表
- mcp_sse_list_tools:调用工具
sse连接工具格式:
{"server_name1": {"url": "http://127.0.0.1:8000/sse","headers": {},"timeout": 60,"sse_read_timeout": 300},"server_name2": {"url": "http://127.0.0.1:8001/sse"}
}
3.案例
3.1.高德地图MCP服务
进入高德地图开发者后台:注册应用,完成实名认证,获取MCP服务器密钥,用于地图和天气数据调用。
我的应用 | 高德控制台
使用教程:快速接入-MCP Server | 高德地图API
dify使用高德地图mcp-server:
{"server_name1":{ "url": "https://mcp.amap.com/sse?key=****","headers": {},"timeout": 60,"sse_read_timeout": 300 }}
3.2.Zapier MCP服务
Zapier MCP 是 Zapier 用于支持其自动化工作流(Zaps)的底层微服务通信平台,旨在高效连接不同应用(如 Slack、Google Sheets 等)的 API,实现跨系统的数据流转与自动化触发。其核心目标是降低集成复杂度,提升可扩展性。
可以获取集成7000+应用的MCP Server URL,支持邮件、搜索、CRM等多种操作,极大丰富助手功能。
官网:Get Started - Zapier AI Actions
完成注册之后:
2.复制链接地址后面使用
3.添加mcp工具
我这里添加注册了一个搜索引擎:Tavily
{"server_name1":{ "url": "https://mcp.amap.com/sse?key=***","headers": {},"timeout": 60,"sse_read_timeout": 300 },"server_name2":{ "url": "刚才的链接"}}
添加到mcp服务配置中:
创建智能体:
你是一个智能助手,可根据用户输入的指令,进行推理并调用工具,完成任务后返回给用户结果。其中
server_name1为地图和天气服务,其中server_name2为搜索服务。
3.3.如何自定义MCP工具
现在如果自己写了一个爬虫工具,需要调用到dify工作流或者智能体中如何实现呢
1.搭建MCP-server,选择sse通信协议,举例子:
from fastmcp import FastMCPmcp = FastMCP("Demo 🚀",port=9000)@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + bif __name__ == "__main__":mcp.run(transport='sse')
直接运行:
成功搭建。
2.dify调用
{"mcp_server": {"url": "http://本机ip:9000/sse","headers": {},"timeout": 5,"sse_read_timeout": 300}
}
完整示例:
import anyio
import click
import httpx
import mcp.types as types
from mcp.server.lowlevel import Serverimport pandas as pd
import time# async def fetch_website(
# url: str,
# ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
# headers = {
# "User-Agent": "MCP Test Server (github.com/modelcontextprotocol/python-sdk)"
# }
# async with httpx.AsyncClient(follow_redirects=True, headers=headers) as client:
# response = await client.get(url)
# response.raise_for_status()
# return [types.TextContent(type="text", text=response.text)]async def fetch_website(data_type: str,Start_Time: str,End_Time: str,
)-> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.edge.service import Servicefrom selenium.webdriver.edge.options import Optionsfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.action_chains import ActionChains# 设置Edge浏览器选项# try:# except Exception as e:# print("Edge浏览器启动失败,请检查驱动是否正确安装!")# print(e)all_data_dist = {"综合": "GANGCAIZONGHE","长材": "CHANGCAI","扁平": "BIANPING","一次材": "YICICAI","华东": "HUADONG","华南": "HUANAN","华北": "HUABEI","中南": "ZHONGNAN","东北": "DONGBEI","西南": "XINAN","西北": "XIBEI","螺纹": "LUOWEN","线材": "XIANCAI","型材": "XINCAI","中厚": "ZHONGHOU","锅炉容器板": "GUOLURONGQIBAN","造船板": "ZAOCHUANBAN","热卷": "REJUAN","窄带": "ZAIDAI","冷板": "LENGBAN","镀锌板卷": "DUXIN","无缝管": "WUFENGGUAN","聊城无缝钢管": "WUFENG_LIAOCHENG","焊管": "HANGUAN","盘扣式钢管脚手架": "PKSJSJ"}print("开始爬取数据")print("普钢的所有数据类型:" + str(all_data_dist.keys()))# Start_Time = input("请输入开始日期(格式:2024-01-01):") or "2024-04-01"Start_Time_year = Start_Time.split("-")[0]Start_Time_month = Start_Time.split("-")[1]Start_Time_day = Start_Time.split("-")[2]# day格式转换02需要去掉前导0Start_Time_day = str(int(Start_Time_day))print(f"开始日期:{Start_Time_year}-{Start_Time_month}-{Start_Time_day}")# End_Time = input("请输入结束日期(格式:2025-04-01):") or "2025-04-01"End_Time_year = End_Time.split("-")[0]End_Time_month = End_Time.split("-")[1]End_Time_day = End_Time.split("-")[2]# day格式转换02需要去掉前导0End_Time_day = str(int(End_Time_day))print(f"结束日期:{End_Time_year}-{End_Time_month}-{End_Time_day}")# data_type = input(# "请输入需要爬取的数据类型:普钢['综合', '长材', '扁平', '一次材', '华东', '华南', '华北', '中南', '东北', '西南', '西北', '螺纹', '线材', '型材', '中厚', '锅炉容器板', '造船板', '热卷', '窄带', '冷板', '镀锌板卷', '无缝管', '聊城无缝钢管', '焊管', '盘扣式钢管脚手架']")data_type1 = all_data_dist[data_type]# 等待页面加载3s# time.sleep(3)# # element = driver.find_element(By.CLASS_NAME, "mRightBox")# # 等待页面加载3s-# time.sleep(3)edge_options = Options()edge_options.add_argument("--headless") # 无头模式,不显示浏览器窗口edge_options.add_argument("--disable-gpu")edge_options.add_argument("--window-size=1920,1080")edge_service = Service('D:\桌面文件\edgedriver_win64\msedgedriver.exe') # 替换为你的Edge驱动路径driver = webdriver.Edge(service=edge_service, options=edge_options)print("开始打开浏览器")url = "https://index.mysteel.com/xpic/detail.html?tabName=pugang"driver.get(url)time.sleep(3)driver.find_element(By.CSS_SELECTOR, "img.addBtn[src*='icon.png']").click() # 点击展开print("点击展开")time.sleep(3)# print(element.text)try:# 点击类型key1 = driver.find_element(By.ID, data_type1)key1.click()# 等待页面加载3stime.sleep(3)# //*[@id="searchTimeLiDiv"]/ul/li[1]/a按日查询key2 = driver.find_element(By.XPATH, '//*[@id="searchTimeLiDiv"]/ul/li[1]/a')key2.click()time.sleep(1)# 起始日期//*[@id="startDay"]start_date = driver.find_element(By.XPATH, '//*[@id="startDay"]')# start_date.clear()start_date.click()time.sleep(1)driver.maximize_window()# # 解析年月日# target_date = "2021-09-01"# year, month, day = target_date.split('-')# # 等待日历面板加载# WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.CSS_SELECTOR, ".daterangepicker.dropdown-menu"))# )from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import Select# 选择年份(如果页面有年份下拉框)year_dropdown = driver.find_element(By.XPATH, "/html/body/div[3]/div[2]/div/table/thead/tr[1]/th[2]/select[2]")year_dropdown.click()time.sleep(1)print("选择年份下拉框")# 选择年份<option value="1975">1975</option># year_dropdown.find_element(By.XPATH, f"//option[@value='{year}']").click()# print(f"选择年份:{year}")select = Select(year_dropdown)select.select_by_visible_text(Start_Time_year) # 根据文本选择print(f"选择年份:{Start_Time_year}")# 输出# 选择月份 /html/body/div[3]/div[2]/div/table/thead/tr[1]/th[2]/select[1]month_dropdown = driver.find_element(By.XPATH, "/html/body/div[3]/div[2]/div/table/thead/tr[1]/th[2]/select[1]")month_dropdown.click()time.sleep(1)print("选择月份下拉框")select1 = Select(month_dropdown)select1.select_by_visible_text(Start_Time_month) # 根据文本选择print(f"选择月份:{Start_Time_month}")# 选择日期date_cell = driver.find_element(By.XPATH, f"//td[contains(@class, 'available') and text()='{Start_Time_day}']")date_cell.click()time.sleep(1)print(f"选择日期:{Start_Time_day}")except Exception as e:print(f"执行出错: {str(e)}")driver.save_screenshot('error.png')try:# //*[@id="searchTimeLiDiv"]/ul/li[1]/a按日查询key2 = driver.find_element(By.XPATH, '//*[@id="searchTimeLiDiv"]/ul/li[1]/a')key2.click()time.sleep(1)# 终止日期//*[@id="endDay"]end_date = driver.find_element(By.XPATH, '//*[@id="endDay"]')# start_date.clear()end_date.click()time.sleep(1)driver.maximize_window()# 解析年月日target_date = "2021-09-01"year, month, day = target_date.split('-')# # 等待日历面板加载# WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.CSS_SELECTOR, ".daterangepicker.dropdown-menu"))# )from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import Select# 选择年份(如果页面有年份下拉框)year_end_dropdown = driver.find_element(By.XPATH,"/html/body/div[4]/div[2]/div/table/thead/tr[1]/th[2]/select[2]")year_end_dropdown.click()print("选择年份下拉框")# 选择年份<option value="1975">1975</option># year_dropdown.find_element(By.XPATH, f"//option[@value='{year}']").click()# print(f"选择年份:{year}")select_year_end = Select(year_end_dropdown)select_year_end.select_by_visible_text(End_Time_year) # 根据文本选择print(f"选择年份:{End_Time_year}")# 输出# 选择月份 /html/body/div[4]/div[2]/div/table/thead/tr[1]/th[2]/select[1]month_end_dropdown = driver.find_element(By.XPATH,"/html/body/div[4]/div[2]/div/table/thead/tr[1]/th[2]/select[1]")month_end_dropdown.click()print("选择月份下拉框")select_month_end = Select(month_end_dropdown)select1_month_end = select_month_end.select_by_visible_text(End_Time_month) # 根据文本选择print(f"选择月份:{End_Time_month}")# /html/body/div[4]/div[2]# 找到右侧日历left_calendar = driver.find_element(By.XPATH,'/html/body/div[4]/div[2]')# 选择日期# left_calendar = driver.find_element(By.CLASS_SELECTOR, "calendar single left")# driver.find_element(By.XPATH, "//td[contains(@class, 'available') and text()='2']")date_end_cell = left_calendar.find_element(By.XPATH,f'.//td[text()={End_Time_day}]')date_end_cell.click()driver.save_screenshot('C:\pythonProject\python爬虫\我的钢铁网\end_date.png')print(f"选择日期:{End_Time_day}")except Exception as e:print(f"执行出错: {str(e)}")driver.save_screenshot('error.png')# 点击搜索按钮search_btn = driver.find_element(By.XPATH, '//*[@id="dome1"]/table/tbody/tr/td[5]/img')search_btn.click()# driver.save_screenshot('C:\pythonProject\python爬虫\我的钢铁网\搜索之后.png')element = driver.find_element(By.CLASS_NAME, "mRightBox")# 等待页面加载3s-time.sleep(3)#保存截图driver.save_screenshot('C:\pythonProject\python爬虫\我的钢铁网\搜索之后.png')print(element.text)# data_str = element.text# driver.quit()return [types.TextContent(type="text", text=element.text)]# return data_str@click.command()
@click.option("--port", default=8000, help="Port to listen on for SSE")
@click.option("--transport",type=click.Choice(["stdio", "sse"]),default="stdio",help="Transport type",
)
def main(port: int, transport: str) -> int:app = Server("mcp-website-fetcher")@app.call_tool()async def fetch_tool(name: str, arguments: dict) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:if name != "fetch":raise ValueError(f"Unknown tool: {name}")# if "url" not in arguments:# raise ValueError("Missing required argument 'url'")return await fetch_website(arguments["data_type"],arguments["Start_Time"],arguments["End_Time"])@app.list_tools()async def list_tools() -> list[types.Tool]:return [types.Tool(name="fetch",description="抓取网页数据,需要输入抓取钢材的类型,开始时间,结束时间三个参数",inputSchema={"type": "object","required": ["data_type", "Start_Time", "End_Time"],"properties":{"data_type": {"type": "string", "description": "钢材种类(如HRB400)"},"Start_Time": {"type": "string", "format": "date", "description": "开始时间(YYYY-MM-DD)"},"End_Time": {"type": "string", "format": "date", "description": "结束时间(YYYY-MM-DD)"},},},)]if transport == "sse":from mcp.server.sse import SseServerTransportfrom starlette.applications import Starlettefrom starlette.responses import Responsefrom starlette.routing import Mount, Routesse = SseServerTransport("/messages/")async def handle_sse(request):async with sse.connect_sse(request.scope, request.receive, request._send) as streams:await app.run(streams[0], streams[1], app.create_initialization_options())return Response()starlette_app = Starlette(debug=True,routes=[Route("/sse", endpoint=handle_sse, methods=["GET"]),Mount("/messages/", app=sse.handle_post_message),],)import uvicornuvicorn.run(starlette_app, host="0.0.0.0", port=port)else:from mcp.server.stdio import stdio_serverasync def arun():async with stdio_server() as streams:await app.run(streams[0], streams[1], app.create_initialization_options())anyio.run(arun)return 0
运行:
uv run mcp_simple_tool --transport sse --port 8000
{"Web crawling": {"url": "http://10.***:8000/sse","headers": {},"timeout": 5,"sse_read_timeout": 300}
}
相关文章:
【人工智能agent】--dify通过mcp协议调用工具
MCP Client 发起工具调用的实体,也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口(工具节点)来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中,就是模拟 API 服务器 上的各个API (/api/pump/st…...
Review --- Redis
Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的,key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库(存储一些简单的数据,例如新闻点赞量),**缓存(秒…...
Sql刷题日志(day8)
一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string:要操作的字符串。length:要从右侧提取的字符数 */ 2、curdate():返回当前日期,格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈,因…...
【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
(导读 ) 人工智能对计算性能需求剧增,电子微处理器发展受功耗限制。光学计算有望解决这些问题,光学神经网络(ONNs)成为研究热点,但现有 ONNs 因设计缺陷,在图像分类任务中精度远低于现代电子神经网络&#…...
2025-05-07 Unity 网络基础8——UDP同步异步通信
文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 客户端和服务端的流程如下: 创建套接字 Socket。用 Bind() 方法将套…...
K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
一、金丝雀发布概述 1.1 什么是金丝雀发布? 金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑…...
手持小风扇方案解说---【其利天下技术】
春去夏来,酷暑时节,小风扇成为外出必备的解暑工具,近年来,随着无刷电机的成本急剧下降,小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达,其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...
Qt开发:枚举的介绍和使用
文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM(Qt 5.5 及以上)3.2 示例:枚举值转字符串3.4 示例:字符串转枚举值 四、枚举与字符串相互转换五、枚…...
HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录
前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先,需要在项目的文…...
“胖都来”商标申请可以通过注册不!
近日“胖都来”被网友认为是蹭“胖东来”品牌流量在互联网上引起争议,看到许多自媒体说浙江这家公司已拿到“胖都来”的注册商标,普推知产商标老杨经检索后发现是没有的,只是申请受理。 对于商城类主要类别是在35类广告销售,核心是…...
【Django】中间件
Django 中间件是 Django 框架里一个轻量级、可插拔的组件,它能在全局范围内对 Django 的请求和响应进行处理。中间件处于 Django 的请求处理流程之中,在请求抵达视图函数之前以及视图函数返回响应之后执行特定操作。以下是关于 Django 中间件的详细介绍&…...
电子电器架构 --- 48V架构的一丢丢事情
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
什么是Blender?怎么获取下载Blender格式文件模型
glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序,用于建模和动画,最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发,后来作为自己的程序发布。这是一个称职的程序,近年来由于…...
Ubuntu安装pgsql
一、通过 APT 安装(推荐) 更新软件包列表 sudo apt update 安装 PostgreSQL 核心包及工具 sudo apt install postgresql postgresql-client postgresql-contrib • postgresql:数据库服务端 • postgresql-client:命令行…...
Qwen2-VL详解
一、引言 在人工智能领域,多模态大模型的发展备受关注。Qwen2-VL 作为一款先进的多模态模型,致力于克服现有方法在处理图像和视频数据时存在的不足,显著提升多模态信息的理解与交互能力。本文将全面且深入地阐述 Qwen2-VL 的创新理念、精妙的模型架构、严谨的训练流程、卓越…...
定长滑动窗口---初阶篇
目录 滑动窗口核心思想 定长滑动窗口套路 定长滑动窗口习题剖析 1456. 定长子串中元音的最大数目 643. 子数组最大平均数 I 1343. 大小为 K 且平均值大于等于阈值的子数组数目 2090. 半径为 k 的子数组平均值 2379. 得到 K 个黑块的最少涂色次数 2841. 几乎唯一子数组…...
以pytest_addoption 为例,讲解pytest框架中钩子函数的应用
钩子函数(Hook Function)的概念 钩子函数(Hook Function)是软件框架中预定义的回调接口,允许开发者在程序执行的特定阶段插入自定义逻辑,以扩展或修改框架的默认行为。在 pytest 中,钩子函数覆…...
数据智能重塑工业控制:神经网络在 MPC 中的四大落地范式与避坑指南
一、引言:工业控制的范式革命 在工业 4.0 的浪潮中,传统基于物理模型的控制方法(如 PID、线性二次型调节器 LQR)正面临前所未有的挑战。以石化行业为例,某炼油厂的催化裂化装置(FCCU)因反应机理…...
AB测试面试题
AB测试面试题 常考AB测试问答题(1)AB测试的优缺点是什么?(2)AB测试的一般流程/介绍一下日常工作中你是如何做A/B实验的?(3)第一类错误 vs 第二类错误 vs 你怎么理解AB测试中的第一、二类错误?(4)统计显著=实际显著?(5)AB测试效果统计上不显著?(6)实验组优于对…...
phpstudy升级新版apache
1.首先下载要升级到的apache版本,这里apache版本为Apache 2.4.63-250207 Win64下载地址:Apache VS17 binaries and modules download 2.将phpstudy中原始apache复制备份Apache2.4.39_origin 3.将1中下载apache解压, 将Apache24复制一份到ph…...
民宿管理系统6
普通管理员管理: 新增普通管理员: 前端效果: 前端代码: <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…...
【iOS】源码阅读(三)——内存对齐原理
文章目录 前言获取内存大小的三种常用方式sizeofclass_getInstanceSizemalloc_size 总结 前言 之前学习alloc相关源码,涉及到内存对齐的相关内容,今天笔者详细学习了一下相关内容并写了此篇博客。 获取内存大小的三种常用方式 获取内存大小的方式有很多…...
在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
需求目标 所有认证用户可访问 Samba 共享目录 /path/to/home;**仅特定用户(如 developer)**拥有写权限;其他用户仅允许读取;禁止匿名访问。 配置步骤 1. 设置文件系统权限 将目录 /home3/guest 的所有权设为 develo…...
配置指定地址的conda虚拟Python环境
创建指定路径的 Conda 环境 在创建环境时,使用 --prefix 参数指定自定义路径: conda create --prefix/your/custom/path/my_env python3.8 说明: /your/custom/path/my_env:替换为你希望存放环境的路径(如 D:\projec…...
从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」
作者:Techub 精选编译 撰文:Matti,Zee Prime Capital 编译:Yangz,Techub News 我又带着一篇受彼得蒂尔(Peter Thiel)启发的思想杂烩回来了。作为自封的「蒂尔学派」信徒,我常透过他…...
VS Code 常用插件
React Auto Import - ES6, TS, JSX, TSX Auto Rename Tag ES7 React/Redux/React-Native snippets Markdown Markdown All in One Markdown Preview Enhanced Other Prettier - Code formatter 格式化代码 Live Server 本地服务器实时预览与自动刷新...
深入探讨 UDP 协议与多线程 HTTP 服务器
深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议:高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地,适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接:无需提前建立连接&…...
Node.js入门指南:开启JavaScript全栈开发之旅
Hi,我是布兰妮甜 !Node.js让JavaScript突破了浏览器的限制,成为全栈开发的利器。作为基于V8引擎的高性能运行时,它彻底改变了JavaScript只能做前端开发的局面。本文将带你快速掌握Node.js的核心用法:环境搭建与模块系统…...
【STM32F1标准库】理论——通信协议:串口
目录 一、简介 二、连接方式 三、串口参数与时序 1.参数 2.时序 四、STM32实现串口通信的方法 1.使用软件模拟 2.使用硬件外设 杂谈 1.通信的目的 2.常见可以使用串口通信的模块 3.串口常用电平标准 4.串口从波形反推数据 5.奇偶校验 一、简介 命名:USART&#…...
轻松管理房间预约——启辰智慧预约小程序端使用教程
欢迎您使用《启辰智慧预约》场所预约小程序,您可以通过本小程序预约会议室/活动室等,并在预约审批通过后,获取临时开锁密码,开锁密码会在预约时间前30分钟生效。以下是本程序的使用流程。 一、创建单位(新用户注册&am…...
如何在自己的服务器上部署静态网页并通过IP地址进行访问
文件放置 cd /var目录 新建www目录 进入www目录 新建html目录用于放置文件以及相关资源 修改配置文件 sudo nano /etc/nginx/sites-available/default修改index部分的html文件名 修改端口映射避免80冲突 重启Nginx sudo systemctl restart nginx打开浏览器访问即可 h…...
802.11s Mesh 组网框架流程
协议标准 使用 802.11s (标准 Mesh 协议) 基础流程框架 连接流程本质:Beacon → Peer Link → HWMP 路径发现 → 数据传输。mesh与easymesh的区别 阶段详解 阶段1:Beacon广播 作用:周期性宣告Mesh网络存在,同步参数(如Mesh …...
gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit
登陆gitcoe,在项目设置->提交设置 ,勾选提交文件限制,修改限制的大小。 修改完后,重新提交代码。...
C++代码随想录刷题知识分享-----判断两个字符串是否为字母异位词(Anagram)【LeetCode 242】
✨ 题目描述 给定两个字符串 s 和 t,请判断 t 是否是 s 的字母异位词。 📌 示例 1: 输入:s "anagram", t "nagaram" 输出:true📌 示例 2: 输入:s "…...
Canal mysql to mysql 增加 online 库同步配置指南
Canal 增加新库 online 的配置指南 1. 停止 Canal Adapter 服务 ./bin/stop.sh2. 数据库备份与导入 备份源数据库 mysqldump -h 127.0.0.1 -P 3307 --single-transaction -uroot -p -B online > online.sql导入到目标数据库 mysql -h 127.0.0.1 -P 3308 -uroot -p <…...
Spring MVC中Controller是如何把数据传递给View的?
在 Spring MVC 中,Controller 负责请求的处理,准备需要展示的数据,并将这些数据传递给 View,由 View 负责最终的页面渲染。数据从 Controller 传递到 View 主要通过模型 (Model) 实现。 Spring MVC 提供了以下几种方式让 Control…...
FAST-LIO笔记
1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器(IEKF)将激光雷达特征点与IMU数据进行融合,使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…...
挑战用豆包教我学Java01天
今天是豆包教我学Java的第一天,废话不多说直接开始。 1.每日题目: 基础语法与数据类型 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。题目:编写…...
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
文章目录 前言一、RT-Thread工程创建二、ADC工程创建三、ADC功能实现1.ADC.c2.ADC.h3.mian.c 四、效果展示和工程分享总结 前言 本文使用的是RT-Thread最新的驱动5.1.0,兼容下面的所有驱动。使用的开发板是蓝桥杯嵌入式国信长安的开发板,MCU是STM32G431…...
居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
居民健康监测小程序 目录 基于微信小程序的居民健康监测小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、健康科普管理 5.3公告类型管理 3、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...
电商双11美妆数据分析
图中展示的是在Jupyter Notebook环境下的Python代码及运行结果。代码利用 seaborn 和 matplotlib 库,以 datal 数据集为基础,绘制上下两个子图。上方子图呈现各店铺中各大类的销售量,下方子图展示各店铺中各大类的销售额,通过条形…...
Spark-Core(双Value类型)
一、RDD转换算子(双Value类型) 1、intersection 函数签名: def intersection(other: RDD[T]): RDD[T] 函数说明:对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 举栗: val dataRDD1 sparkContext.makeRDD(List(…...
【数据库原理及安全实验】实验六 角色访问控制
指导书原文 安全性管理二 【实验目的】 1) 通过语句设置登录用户的权限,实现对不同用户的操作权限的限定。 【实验原理】 1) 定义数据库角色,授予该角色特定权限,建立不同的用户将其置入不同的角色之下,即等于分配了该用户不…...
windows安装micromamba
windows安装 winget install Mamba.Micromamba Set-ExecutionPolicy RemoteSigned micromamba activate 第一次运行会报错,把报错中间那一句init代码跑一下 创建环境什么的和conda一样 把conda换成micromamba就行 绑定快捷键,winget安装&#x…...
vue-quill-editor的失焦事件
vue-quill-editor的用法再此就不再赘述了,只记录我在使用过程中踩的坑。 版本:Vue2 vue-quill-editor3.0.6 封装组件: <vue-quill-editorclass"editor":class"dynamicClasses"ref"myTextEditor"v-model&quo…...
【工具变量】最新华证ESG评级得分数据-含xlsx及dta格式(2009-2024.12)
参考《经济研究》中方先明(2023)的做法,将华证ESG评级进行赋值,指标包含C、CC、CCC、B、BB、BBB、A、AA、AAA共9个等级,将上市公司ESG等级从低到高分别赋值为1至9。将华证ESG评级得分数据更新至2024年12月31日…...
【纯小白博客搭建】Hugo+Github博客部署及主题(stack)美化等界面优化记录
这里写目录标题 HugoGithub博客部署及主题(stack)美化等界面优化写在前面hugo博客搭建教程第一种方案第二种方案 添加浏览量和统计字数添加评论功能添加访客地图 HugoGithub博客部署及主题(stack)美化等界面优化 效果图如下 如果…...
题解:CF2107E Ain and Apple Tree
首先考虑无解的情况。 当这棵树为一条链时,答案取到最大值。证明很简单,假设存在一个节点 u u u 至少有 2 2 2 个孩子节点,任取两个 v 1 , v 2 v_1,v_2 v1,v2,则 dep ( LCA ( v 1 , v 2 ) ) dep ( u ) \text{dep}(\o…...
STM32的看门狗
独立看门狗(IWDG) IWDG简介 独立看门狗(Independent Watchdog,通常缩写为IWDG)主要作用是主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。 WDG本质上是一个12位的递减计数器(滴答定…...
小王包子铺的融资过程以及IPO上市过程
用包子铺来打个通俗易懂的比喻,一步步讲清楚从创业到融资上市的全过程。 🥟 故事背景:老王的包子铺 老王做的包子特别好吃,于是他决定不再只是摆摊,而是创办一家叫 “老王包子铺” 的连锁店。我们就以老王创业为线索&…...