管道
1. client
# 客户端代码
import subprocess
import json
# 启动服务器进程(创建两个管道)
process = subprocess.Popen(
['python', 'server.py'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
text=True
)
# 发送请求(写入stdin管道)
request = {"jsonrpc": "2.0", "method": "tools/list", "id": 1}
process.stdin.write(json.dumps(request) + '\n')
process.stdin.flush()
# 接收响应(读取stdout管道)
response_line = process.stdout.readline()
response = json.loads(response_line)
print(response)
2. server
# 服务器代码
import sys
import json
def handle_request(request):
# 简单返回一个工具列表作为示例
if request.get("method") == "tools/list":
return ["tool1", "tool2"]
return None
# 接收请求(读取stdin管道)
request_line = sys.stdin.readline()
request = json.loads(request_line)
# 处理请求
result = handle_request(request)
# 发送响应(写入stdout管道)
response = {
"jsonrpc": "2.0",
"result": result,
"id": request.get("id")
}
sys.stdout.write(json.dumps(response) + '\n')
sys.stdout.flush()
3. ouput
{'jsonrpc': '2.0', 'result': ['tool1', 'tool2'], 'id': 1}
数据直接在内存中的管道缓冲区传输
服务器进程 客户端进程
↓ ↑
print("data") readline()
↓ ↑
stdout buffer → pipe buffer → stdin buffer
(进程内存) (内核空间) (进程内存)