2个稳定版本
1.0.1 | 2023年8月1日 |
---|
#26 in #stdio
113 每月下载量
在 9 个crate(2个直接) 中使用
79KB
1.5K SLoC
multilink
一个IPC库,为本地和远程进程提供通信功能。支持响应流/事件。基于tower构建。
通信
远程进程之间的通信是通过HTTP客户端和服务器实现的。本地客户端将服务器作为子进程调用,并通过“stdio上的JSON-RPC”进行通信。
使用方法
您可以通过启用某些功能来配置支持的IPC方法
[dependencies]
multilink = { version = "<version>", features = ["<http-server|http-client|stdio-server|stdio-client>"] }
组件
以下是使用multilink的解决方案的组件
- 一组协议无关的请求和响应类型:在所有服务中使用的类型,无论底层协议如何;通常是一组枚举
- 处理服务:处理协议无关的请求,执行一些逻辑并返回响应
- 转换trait实现:将协议无关的请求/响应转换为JSON-RPC或HTTP请求/响应
- HTTP和“stdio上的JSON-RPC”客户端和服务器:multilink实现的唯一部分;将上述三个项目组合在一起
multilink客户端的调用者将仅使用协议无关的请求和响应类型,这允许在协议之间无缝切换。
本地通信
在本地IPC场景中,客户端将作为子进程启动服务器,并通过stdin/stdout与它通信,使用JSON-RPC作为协议。
协议无关的请求被转换为 JsonRpcRequest
,响应被转换为 JsonRpcResponse
或 JsonRpcNotification
。
此协议的客户端/服务器组合是 StdioServer
和 StdioClient
。
远程通信
在远程IPC场景中,客户端将向定义的服务器发出HTTP请求。该库使用hyper实现此功能。
协议无关的请求被转换为 HttpRequest<Body>
。响应被转换为 ModalHttpResponse
枚举,它包含 Single
和 Multiple
变体。
该协议的客户端/服务器组合是 HttpServer
和 HttpClient
。
流式响应/通知
该库支持每个请求多个响应。如果服务以包含在 ServiceResponse<Response>::Multiple
值中的 Stream
响应,则将传输多个响应。
所有流式响应都必须与一个请求相关联。
将响应转换为 JSON-RPC 消息时,必须使用 JsonRpcNotification
,原始请求 ID 作为方法。
对于 HTTP 流,底层使用 服务器端事件。
示例和参考文档
有关上述功能的完整示例,请参阅 examples/
目录中的问候服务器和客户端。
参考文档可在 docs.rs 上找到。
许可证
依赖项
~4–15MB
~188K SLoC