EchoStream
2026-01|Packages
A bi-directional RPC and streaming framework
源码项目简介
EchoStream 是 EchoRPC 双向 RPC 框架的升级版,支持实时流式数据传输。
支持客户端与服务端双向主动通信:RPC 请求、事件推送、流式数据传输。
四端(Rust / Node / Python / Web)共享同一份 Rust 核心,逻辑同构。
核心特性
- 双向通信:客户端和服务端都可以主动发起请求、发送事件和推送流
- 三种模式:RPC(请求/响应)、Event(单向事件)、Stream(连续数据流)
- 高性能:RPC 复用通道 + 连接池 + Event 数据报不可靠通道(见 benchmark)
- 多端一致:Rust / Node / Python / Web 同一协议同一 DX,跨语言互操作开箱即用
- 自动编解码:各端直接传原生值(数字/字符串/对象/数组),框架自动序列化
- 基于 QUIC:多路复用、0-RTT、自动拥塞控制、TLS 1.3 加密
- 开箱即用:自动生成自签名证书,开发环境零配置
- 声明式宏:
#[rpc] / #[event] / #[stream],业务只写强类型函数
- 可扩展:插件(控制面)+ 中间件(数据面)+ 扩展(文件传输 / 音视频流)+ mDNS 服务发现(可选)
快速开始(Rust)
use echostream::prelude::*;
#[rpc("add")]
async fn add((a, b): (i64, i64)) -> Result<i64> {
Ok(a + b)
}
#[event("hello")]
async fn on_hello(session: &Session, msg: String) -> Result<()> {
println!("[{}] {msg}", session.peer_addr());
Ok(())
}
#[tokio::main]
async fn main() -> Result<()> {
ServerBuilder::new()
.bind("0.0.0.0:5000")
.add_rpc(Add)
.add_event(OnHello)
.serve()
.await
}
async fn client_demo() -> Result<()> {
let client = ClientBuilder::new().connect("127.0.0.1:5000").await?;
let sum: i64 = client.request("add", &(10, 20)).await?;
client.emit("hello", &"world".to_string()).await?;
Ok(())
}
多端开发体验一致
import echostream
client = echostream.connect("127.0.0.1:5000")
total = client.request("add", 10, 20)
import { connect } from "echostream-node";
const client = await connect("127.0.0.1:5000");
const sum = await client.request("add", 10, 20);
import { EchoStream } from "./dist/echostream.js";
const client = new EchoStream("ws://192.168.1.100:8081");
await client.connect();
const sum = await client.request("add", 10, 20);
服务发现(mDNS)
use echostream::prelude::*;
use std::time::Duration;
let service = ServiceInfo::new("echo-server", 5000)?
.set_property("version", "1.0.0");
let _advertiser = Discovery::advertise(service)?;
let found = Discovery::discover("echo-server", Duration::from_secs(3)).await?;
let client = ClientBuilder::new().connect(found[0].address()).await?;