ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">起因ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">昨天想要复现黄老师的一篇公众号文章里的操作:ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;"> ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">复现过程遇到了一点问题。ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;"> ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">高德MCP添加成功,显示“可使用”ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">在运行过程中却总是出现(HTTP 504)错误:ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">我在网上搜了很多解决方案,ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">CSDN:504 Gateway Timeout: 网关超时的完美解决方法ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(31, 35, 41);margin: 0px 0px 4px;word-break: break-all;min-height: 20px;">https://blog.csdn.net/qq_42055933/article/details/141760595但都解决不了我的问题。服务器问题我解决不了,网络问题我没有,不知道怎么办。。。
后来请教了黄老师,他说可能是高德的问题 那没办法了,就先不管它了。
我不喜欢在自己控制不了的事情上浪费时间,就想着睡一觉起来服务器应该就没问题了吧?
今天早晨起来我再次尝试,依然显示 504错误,那如果真是服务器问题的话,这也太久了~ 而且我在搜索的过程中也没见其他人问过这个问题
那就只能在自己身上找原因了~
尝试解决我做了两件事: - 1.把之前创建的 高德key 删除,重新创建了一个key。
高德官网:https://lbs.amap.com/ 在高德官网创建 key
然后根据官网指引接入 MCP 配置。 第一种配置代码: {"mcpServers":{"amap-amap-sse":{"url":"https://mcp.amap.com/sse?key=您在高德官网上申请的key"}}}
第二种配置代码: https://mcp.so/server/amap-maps/amap?tab=content {"mcpServers":{"amap-maps":{"command":"npx","args":["-y","@amap/amap-maps-mcp-server"],"env":{"AMAP_MAPS_API_KEY":"您在高德官网上申请的key"}}}}
这两个操作做完之后,高德MCP就调用成功了! OK,问题已经解决了,但是,问题到底出在哪了呢? 我太着急解决问题,直接同时修改了 Key 和 MCP配置代码,所以现在没办法判断到底是哪里出了问题。
(现在Trae正在跑任务,稍后我会把 MCP配置代码改回去,看看还能不能成功,如果成功了,就说明是 key 的问题,如果失败了,就说明是配置代码的问题)
问题分析把这两段配置代码发给【豆包】,让它进行对比分析: {"mcpServers":{"amap-amap-sse":{"url":"https://mcp.amap.com/sse?key=您在高德官网上申请的key"}}}{"mcpServers":{"amap-maps":{"command":"npx","args":["-y","@amap/amap-maps-mcp-server"],"env":{"AMAP_MAPS_API_KEY":"您在高德官网上申请的key"}}}}?这两段代码都是用来调用高德mcp的配置代码,它们的区别是什么?并分析优劣
配置内容和用途区别- 第一段代码
- 结构上,定义了mcpServers对象,其下有amap - amap - sse子对象 。
- 功能上,主要配置了一个url字段,值为https://mcp.amap.com/sse?key=您在高德官网上申请的key,推测是用于向指定的高德服务器地址发起Server - Sent Events(SSE,服务器发送事件)请求,可能用于获取服务器推送的实时数据等,比如地图相关的实时更新信息等。
这么看来有可能是配置代码的原因,用 SSE 方式接入“与本地服务器相比,远程请求存在网络传输耗时”,504错误就是网络超时问题。
测试下面通过测试验证猜想。
为了提高测试效率,我又单独创建了一个 智能体,它的角色就是 高德MCP测试员 智能体prompt 你是高德MCP调用测试员,目的是测试高德MCP是否可以成功被调用,优先采用最简单的实现路径,跑通即可。如果无法成功调用,返回错误信息,并给出原因和解决方案。 依然显示“可使用” 改回 SSE 方式接入MCP服务 {"mcpServers":{"amap-amap-sse":{"url":"https://mcp.amap.com/sse?key=您在高德官网上申请的key"}}}第一次测试结果:失败 (400错误) 重新确认配置无误, 第二次测试结果:失败(504错误) 再改为 Node.js I/O 模式接入 MCP 服务 (跟mcp.so的代码是一样的) https://lbs.amap.com/api/mcp-server/gettingstarted#t1 {"mcpServers":{"amap-maps":{"command":"npx","args":["-y","@amap/amap-maps-mcp-server"],"env":{"AMAP_MAPS_API_KEY":"您在高德官网上申请的key"}}}}测试结果:成功 结论本次 Trae 接入 高德MCP服务 出现504错误的问题,是接入方式的问题。 把 SSE方式接入 改成 Node.js I/O 模式接入就解决了。
?SSE方式(Server - Sent Events,服务器推送事件 )- 定义:一种轻量级的基于HTTP协议的实时通讯技术,实现服务器向客户端的单向数据流推送 。借助HTML5中的EventSource API,服务器能通过持久化HTTP连接,将事件流数据推送给浏览器端 。
- 工作原理:
- 客户端发起HTTP请求,请求头携带Accept: text/event-stream,向服务器表明接收SSE数据的意愿 。
- 服务器响应请求后,维持HTTP连接,不断向客户端推送事件流 。
- 客户端利用EventSource API接收事件,并按需求处理 。
- 特点:
- 单向通信:仅服务器可向客户端发送数据,客户端无法主动向服务器发数据 。
- 实现简单:基于HTTP协议,无需额外协议或库,服务端返回特定格式事件流,客户端用EventSource对象处理 。
- 低延迟高效:持久化连接,避免传统轮询频繁的连接断开,减少延迟与带宽消耗 。
- 自动重连:连接中断时,客户端自动重连 。
- 兼容性好:基于标准HTTP协议,能融入现有Web应用架构,支持跨域请求 。
- 应用场景:适合服务器频繁更新数据推送给客户端,如实时新闻推送、股票行情更新、服务器日志实时展示、社交通知等 。
Node.js I/O模式Node.js采用异步式I/O(非阻塞式I/O) ,基于事件驱动架构 ,具体如下: - I/O操作概念:线程执行磁盘读写或网络通信等操作统称I/O操作 。
- 阻塞与非阻塞对比:
- 阻塞式I/O:I/O操作耗时久,操作系统剥夺线程CPU控制权使其暂停,I/O完成后恢复控制权 ,即同步式I/O 。比如传统文件读取,读操作时程序等待数据返回,期间不执行其他任务 。
- 异步式I/O(Node.js采用):不等待I/O完成,将请求交操作系统后继续执行后续代码,I/O完成后以事件通知相关线程 。例如Node.js处理网络请求,接收到请求发起I/O操作后,不阻塞等待结果,可继续处理其他请求,结果返回时通过事件机制处理 。
- 事件驱动机制:Node.js启动后初始化变量和函数,等待事件。检测到事件,分配回调函数处理 。单线程处理事件,事件循环不断从事件队列取事件执行 。像HTTP服务器接收客户端请求是事件,触发对应回调函数处理请求并返回响应 。
- 优势:
- 高效处理并发:单线程非阻塞模型,无需多线程开销,能高效处理大量并发请求 。
- 资源占用少:较少资源和内存消耗 。
最终成果展示: https://static-host-x4o0qwe4-yunnantravel.sealoshzh.site/
再复习一下瑞·达利欧在《原则》中说的“五步流程实现你的人生愿望” ?- 有明确的目标。
- 找到阻碍你实现这些目标的问题,并且不容忍问题。
- 准确诊断问题,找到问题的根源。
- 规划可以解决问题的方案。
- 做一切必要的事来践行这些方案,实现成果。
凡墙皆是门 解决问题是一件很快乐的事? |