,

MCP理论知识

stdio 进程:执行一个应用程序,就会启动一个进程,操作系统会为其分配内存空间、系统资源。 应用程序执行完毕…

stdio

进程:执行一个应用程序,就会启动一个进程,操作系统会为其分配内存空间、系统资源。

应用程序执行完毕后,系统分配给进程的资源就会被回收。

课堂演示

进程之间是可以通信的。那这里有一个最基本的要求:进程不能结束。如何让进程不结束?

想想微信、QQ启动后为啥不结束?

因为要监听。

这里也同样,只要进程处于监听状态,就不会结束。

// 监听输入
process.stdin.on("data", () => {});

除此之外,一个进程还可以启动另一个进程,这在操作系统中是非常常见和常用的行为,被称之为 父子进程模型

控制台其实也是一个应用程序,启动后也会有进程。因此下面的代码:

node index.js

控制台就是父进程,node程序就是子进程。

stdio: standard input and output 标准输入输出

每一个进程启动后,都会留出两个对外通信的接口:

  • 标准输入接口:standard in
  • 标准输出接口:standard output

上面进程监听输入和对外输出的图,就可以变成这样:

const { spawn } = require("child_process");

// 启动 server.js 子进程
const serverProcess = spawn("node", ["server.js"]); // node server.js

// 监听服务端的响应
// 数据从哪里来?哪个进程给我的
// 数据会输出到哪儿?我给哪个进程
serverProcess.stdout.on("data", (data) => {
    process.stdin.write(data.toString()); // 🙋 往哪里输出?
});

// 发送几条测试消息
const messages = ["生命有意义吗?", "宇宙有尽头吗?", "再见!"];

messages.forEach((msg, index) => {
  setTimeout(() => {
    console.log(`-->${msg}`);
    serverProcess.stdin.write(msg);
  }, index * 1000); // 每秒发一条
});

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

Previous Post

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor