MCP-学习(1)

MCP学习的前置知识

这一章主要对MCP的前置知识进行学习:stdio(通信方式)、JSON-RPC(通信格式)

stdio

stdio:st and ard i nput and output (标准输入输出)

进程之间是相互独立的,而进程需要与外界进行通信,通信的方式有很多,其中一种就是stdio。它能够让一个进程 通过标准输出接口(stdout) 向外界发送信息、外界也可以 通过它的标准输入接口(stdin) 向进程中写入一些信息。

举个栗子🌰

标准输出接口

用node.js来写个简单案例:

js 复制代码
//创建一个server.js
//process进程  stdout标准输出
process.stdout.write('Hello World!!\n')

然后在终端中运行它node server.js (意思:启动一个node进程,参数是'server.js'),就会发现终端中打印了Hello World!!。没错看起来效果很像console.log(),因为在node环境console.log()的内部确实是调用了process.stdout.write()加上一些额外处理。

那我们刚刚说了,stdio是通信方式呀,那这里是谁跟谁通信了嘞?这里其实是node进程与终端进行通信了 :终端本身是一个进程,它在 启动子进程(这里是node进程) 的时候会去 监听子进程的标准输出接口,终端已经内置了这些流程,当它监听到数据后就会将其显示在终端。

标准输入接口
js 复制代码
//server.js
//监听父进程(终端)输入
process.stdin.on('data',(data)=>{
    const resp = `回复 ${data}\n`
    process.stdout.write(resp)
})

运行后,会发现终端中就会一直运行着这个node进程,可以在终端输入数据然后回车来发送,就可以被node子进程接收到。那么我们就会发现,在这个场景下,终端 类似于客户端 ,因此才会给这个js文件起名为server.js

当然node.js自己本身也可以作为一个父进程来创建更多子进程:

js 复制代码
import {spawn} from 'child_process'

// 创建子进程
const serverProcess = spawn('node',['server.js']) //启动node应用程序,参数是'server.js'

stdio的特点:简洁、高效 ,但仅适用于本地进程间通信

JSON-RPC (通信格式约束)

request(2.0的版本,如果用到不同版本需要分析)
json 复制代码
{
    'jsonrpc': '2.0',  //版本
    'method': 'sum',   //方法
    'params': {        //参数
        "a": 5,
        "b": 6
    },
    'id': 1            //标记
}
response
json 复制代码
{
    'jsonrpc': '2.0',  //版本
    'result': 11,
    'id': 1
}

这边从server.js这边写一个测试:

js 复制代码
import utils from './utils.js'
process.stdin.on('data',(data)=>{
    const req = JSON.parse(data)
    const funcName = req.method
    const params = req.params
    const result = utils[funcName](params)
    const res = {
        'jsonrpc': '2.0',
        'result': result,
        'id': req.id
    }
})

小结

这些通信,主要是补充了某一些进程功能上的不足

相关推荐
9***P33419 分钟前
Rust在网络中的Rocket
开发语言·后端·rust
HIT_Weston27 分钟前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
华仔啊44 分钟前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
Wzx1980121 小时前
go聊天室
开发语言·后端·golang
chenyuhao20241 小时前
MySQL索引特性
开发语言·数据库·c++·后端·mysql
JamesGosling6661 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多1 小时前
前端进阶系列之《浏览器渲染原理》
前端
oouy1 小时前
《Java泛型:给你的代码装上“快递分拣系统”,再也不会拆出一双鞋!》
后端
Python私教1 小时前
别再瞎折腾 LangChain 了:从 0 到 1 搭建 RAG 知识库的架构决策实录
后端
微学AI1 小时前
openGauss在AI时代的向量数据库应用实践与技术演进深度解析
后端