2个版本
0.1.0-rc.2 | 2023年8月30日 |
---|---|
0.1.0-rc.1 | 2023年5月22日 |
900 在 编码
225KB
3K SLoC
星际功能接口 (IPFI)
⚠ IPFI 目前处于早期测试版,一些功能可能会随着我们完善而发生变化!该库可用,但可能存在一些问题。
IPFI 是一个基于 Rust 的远程过程调用系统,允许在各种奇特的接口下运行程序有效地相互通信并协作完成任务。它被设计用于一个需要与任何编程语言的代码一起工作的 Rust Web 框架的构建服务器,但它为从一次一字节通信的复杂类型到生产级服务器的一切都提供了有效的接口。
IPFI 提供以下功能:
- 无共享内存的任意数据传输,通过 有线 序列化和反序列化数据
- 管理接口两端的回调,允许程序之间进行简单的过程调用
- 完全支持流式处理过程数据
- 完全异步和线程安全,让您可以同时发送和接收多个消息
- 对安全性和并发性能的高度关注,内置多层DoS预防机制
- 最小化代码足迹,具有功能标志和非常少的依赖项
我们的核心功能是 有线,这可以是您想要的任何东西。IPFI 使用通过逐字节喂入某个任意源的字节数组进行通信。如果您可以通过stdio传递完整的数组,那很好!如果您只能逐字节通过莫尔斯电码发送,没问题,IPFI 可以处理这种情况。这种限制被引入是因为IPFI最初旨在在WebAssembly中工作,那里只有整数是原生类型,在函数边界没有数组概念(如果不是在它构思时尚未标准化的建议,那就是这样)。
IPFI 能做什么?
如果它不在上面的列表中,可能不是。IPFI被设计得极其简单、快速且易于推理。如果你需要将两个程序连接起来,让它们互相通信,你已经有了一个足够复杂的系统,不需要再担心一些额外的奇怪接口程序。不得不使用平台相关的IPC消息队列和不稳定的FFI绝对不是理想的选择,而IPFI的推理非常简单:你发送一些内容,它被复制,你请求执行一个程序,它在定义它的平台上运行。更好的是,IPFI自动处理两个系统之间连接中断的情况:你用来等待响应的所有句柄将干净地终止,任何剩余的内部消息也将被清理。这使得你可以拥有一个可以连接到许多其他程序的一个接口,每个程序都有自己的线。不出所料,这可以用来创建一个服务器系统,在我们的测试中,它的速度比gRPC要显著快!(请参阅初步基准测试,其中可能布满了错误,在这里。)
IPFI是不是一种传输协议?
不是!从技术上讲,IPFI是一个应用层协议,这意味着它运行在与HTTP大致相同的级别,但它独特之处在于它可以与任何可读和可写的内容一起工作。这意味着你可以在TCP、HTTP、信鸽(确实是)或其他任何你能想到的东西上运行IPFI。只要你有某种底层传输可以保证IPFI发送的字节能够到达另一端,并且按照正确的顺序,IPFI将执行实现非常复杂的流式RPC系统所需的所有其他操作。在未来,我们将引入对原生多路复用的支持,使IPFI适合像QUIC(支持HTTP/3)这样的协议:为此已经打下了基础,现在只需要更改代码库中的几个部分。
哦,还有,敬请期待使用莫尔斯电码通过IPFI在两个系统之间进行通信的示例!
许可证
请参阅LICENSE
。
依赖项
~1.5–8.5MB
~68K SLoC