|
# NewLife.Remoting — 统一远程通信框架 (RPC + HTTP + WebSocket + SRMP)








NewLife.Remoting 是 NewLife æŠ€æœ¯æ ˆçš„ç»Ÿä¸€è¿œç¨‹é€šä¿¡åŸºç¡€è®¾æ–½ï¼Œç”±ä¸¤ä¸ª NuGet 包组æˆï¼š
| 包 | å®šä½ | 覆盖 |
|:---|:-----|:------|
| **NewLife.Remoting** | æ ¸å¿ƒé€šä¿¡åº“ | RPC 客户端/æœåŠ¡ç«¯ã€å议编解ç ã€è¿žæŽ¥ç®¡ç†ã€æµå¼è°ƒç”¨ã€å®¢æˆ·ç«¯åŸºç±»ã€æŒ‡ä»¤ä¸‹å‘管线ã€è‡ªåŠ¨æ›´æ–° |
| **NewLife.Remoting.Extensions** | 扩展库 | æœåŠ¡ç«¯æŽ§åˆ¶å™¨åŸºç±»ã€è®¾å¤‡ç®¡ç†æœåŠ¡ã€Token 鉴æƒã€å‘½ä»¤å“应总线 |
æºç :https://github.com/NewLifeX/NewLife.Remoting
> NuGet:`NewLife.Remoting` / `NewLife.Remoting.Extensions`
## 文档索引
| 文档 | 说明 |
|------|------|
| [Doc/需求文档.md](/NewLife/NewLife.Remoting/Blob/master/Doc/需求文档.md) | éœ€æ±‚å®šä¹‰ï¼šæ„¿æ™¯ã€æ ¸å¿ƒç›®æ ‡ã€åŠŸèƒ½éœ€æ±‚ï¼ˆRPC/STRM/CLNT/UPGD/SRV/CMD) |
| [Doc/架构设计.md](/NewLife/NewLife.Remoting/Blob/master/Doc/架构设计.md) | æž¶æž„è®¾è®¡ï¼šåˆ†å±‚æ¦‚è§ˆã€æ ¸å¿ƒæ¨¡å—æž¶æž„ã€å†…å˜ç®¡ç†ã€æµ‹è¯•ç–ç•¥ |
| [Doc/SRV-æœåŠ¡ç«¯æž¶æž„.md](/NewLife/NewLife.Remoting/Blob/master/Doc/SRV-æœåŠ¡ç«¯æž¶æž„.md) | æœåŠ¡ç«¯ä¸šåŠ¡æž¶æž„ï¼šæœåŠ¡å±‚è®¾è®¡ã€æ ¸å¿ƒä¸šåŠ¡æµç¨‹ï¼ˆç™»å½•/注册/注销/心跳/å‡çº§/事件上报/指令下å‘)ã€åœ¨çº¿ä¼šè¯ç”Ÿå‘½å‘¨æœŸã€é›†ç¾¤éƒ¨ç½² |
| [Doc/功能清å•.md](/NewLife/NewLife.Remoting/Blob/master/Doc/功能清å•.md) | 功能追踪:61 个功能点的实现/测试/æ³¨é‡ŠçŠ¶æ€ |
| [Doc/竞å“分æž.md](/NewLife/NewLife.Remoting/Blob/master/Doc/竞å“分æž.md) | 竞å“分æžï¼šRPC 框架对比 + IoT 指令下å‘对比矩阵 |
| [Doc/SRMP.MD](/NewLife/NewLife.Remoting/Blob/master/Doc/SRMP.MD) | SRMP å议规范 |
| [Doc/RPC内å˜ç®¡ç†è®¾è®¡.md](/NewLife/NewLife.Remoting/Blob/master/Doc/RPC内å˜ç®¡ç†è®¾è®¡.md) | é›¶æ‹·è´å†…å˜ç®¡ç† |
| [Doc/自动更新机制.md](/NewLife/NewLife.Remoting/Blob/master/Doc/自动更新机制.md) | 自动更新全链路设计 |
| [Doc/é‡è¯•ç–ç•¥.md](/NewLife/NewLife.Remoting/Blob/master/Doc/é‡è¯•ç–ç•¥.md) | é‡è¯•ç–略:IRetryPolicy 接å£ä¸ŽæŒ‡æ•°é€€é¿ç¤ºä¾‹ |
---
## 亮点
| æ ¸å¿ƒèƒ½åŠ› | 说明 |
|:---------|------|
| **RPC æ ¸å¿ƒæ¡†æž¶** | SRMP åè®®ã€JSON/二进制编解ç ã€è¯·æ±‚å¤„ç†æµæ°´çº¿ã€å®¢æˆ·ç«¯/æœåŠ¡ç«¯ã€Cluster 连接管ç†ã€å…ƒæ•°æ®ä¼ 递ã€é‡è¯•ç–ç•¥ |
| **STRM æµå¼è°ƒç”¨** | Server-Streaming:`IAsyncEnumerable<T>` 逿¡æŽ¨é€ï¼ŒSRMP + SSE åŒåè®® |
| **CLNT 客户端基类** | 登录/心跳/å‡çº§/指令/事件一站å¼å°è£…,WS/SSE åŒé€šé“è‡ªåŠ¨åˆ‡æ¢ |
| **UPGD 自动更新** | æ£€æµ‹â†’ä¸‹è½½â†’æ ¡éªŒâ†’è§£åŽ‹â†’è¦†ç›–â†’é‡å¯å…¨é“¾è·¯ |
| **SRV æœåŠ¡ç«¯åŸºç¡€** | ApiController/BaseController/BaseDeviceControllerã€TokenServiceã€IDeviceService |
| **CMD 指令下å‘** | SessionManager + äº‹ä»¶æ€»çº¿å¹¿æ’ + WS/SSE/Ping å¤šé€šé“ |
## 快速开始
**5 行æœåŠ¡ç«¯ï¼Œ5 行客户端,å³åˆ»è·‘通 RPC 调用:**
```csharp
// === æœåŠ¡ç«¯ ===
var server = new ApiServer(12345);
server.Register<MyController>();
server.Start();
public class MyController : ApiController
{
public String Ping(String name) => $"Hello {name}, {DateTime.Now:HH:mm:ss}";
// æµå¼æŽ¨é€ï¼šè¿”回 IAsyncEnumerable<T> è‡ªåŠ¨é€æ¡ä¸‹å‘
public async IAsyncEnumerable<String> StreamLogs(Int32 count)
{
for (var i = 0; i < count; i++)
{
await Task.Delay(100);
yield return $"Log #{i}: {DateTime.Now:HH:mm:ss}";
}
}
}
// === 客户端 ===
var client = new ApiClient("tcp://127.0.0.1:12345");
client.Open();
// 普通调用
var rs = await client.InvokeAsync<String>("My/Ping", new { name = "dev" });
// æµå¼è°ƒç”¨ — 逿¡æŽ¥æ”¶æœåŠ¡ç«¯æŽ¨é€
await foreach (var log in client.InvokeStreamAsync<String>("My/StreamLogs", new { count = 10 }))
Console.WriteLine(log);
// 元数æ®ä¼ 递(自动注入 TraceId)
client.Headers["TenantId"] = "tenant-01";
```
## æ€§èƒ½æŒ‡æ ‡
| æŒ‡æ ‡ | 典型值 | 实验峰值 |
|:----|:------:|:--------:|
| TCP 长连接数 | 10,000 | 4,000,000 |
| RPC åžå | 100,000 TPS | 22,660,000 TPS |
| 啿¬¡ RPC 延迟 | ~41 μs | — |
| 框架兼容 | net45 / net461 / netstandard2.0 / netstandard2.1 / net5.0 ~ net10.0 |
---
## 与其它 NewLife 组件ååŒ
| 组件 | ååŒä»·å€¼ |
| ---- | -------- |
| NewLife.Core | 日志ã€é…ç½®ã€åºåˆ—化ã€å¯¹è±¡æ± ã€TimerXã€æ€§èƒ½è¿½è¸ª |
| NewLife.Net | é«˜æ€§èƒ½ç½‘ç»œæ ˆã€WebSocket/ç¼–ç 器ã€ç«¯å£å¤ç”¨ |
| NewLife.Redis | 分布å¼ç¼“å˜ / 消æ¯é˜Ÿåˆ—,扩展会è¯å…±äº«æˆ–æŽ¨é€ fanout |
| Stardust | 节点注册ã€é…ç½®ä¸å¿ƒã€APMã€å‘布ä¸å¿ƒï¼›å¯æ‰˜ç®¡ ApiServer 节点 |
| AntJob | 使用 ClientBase 接入任务调度与分布å¼è®¡ç®— |
| NewLife.MQTT / Modbus / IoT | 设备层å议采集åŽé€šè¿‡ Remoting 上行 |
## 贡献与å馈
欢迎:Bug å馈 / 性能优化 PR / æ–°å议编解ç / 控制器示例 / 文档补充。
Issue è®¨è®ºè¯·å°½é‡æä¾›ï¼šè¿è¡ŒçŽ¯å¢ƒã€ç›®æ ‡æ¡†æž¶ã€æœ€å°å¯å¤çް代ç ã€æ—¥å¿—摘è¦ã€‚
---
## 新生命项目矩阵
å„é¡¹ç›®é»˜è®¤æ”¯æŒ net9.0/netstandard2.1/netstandard2.0/net4.62/net4.5,旧版(2024.0801ï¼‰æ”¯æŒ net4.0/net2.0
| 项目 | 年份 | 说明 |
| :--: | :--: | ---- |
| [NewLife.Core](https://github.com/NewLifeX/X) | 2002 | æ ¸å¿ƒåº“ï¼Œæ—¥å¿—ã€é…ç½®ã€ç¼“å˜ã€ç½‘络ã€åºåˆ—化ã€APM性能追踪 |
| [NewLife.XCode](https://github.com/NewLifeX/NewLife.XCode) | 2005 | 大数æ®ä¸é—´ä»¶ï¼Œå•表百亿级,自动分表,读写分离 |
| [NewLife.Net](https://github.com/NewLifeX/NewLife.Net) | 2005 | 网络库,2266万 tps / 百万连接 |
| [NewLife.Remoting](https://github.com/NewLifeX/NewLife.Remoting) | 2011 | 本项目,åŒå议通信框架 |
| [NewLife.Cube](https://github.com/NewLifeX/NewLife.Cube) | 2010 | 快速开å‘å¹³å°ï¼Œæƒé™ / OAuth / SSO |
| [NewLife.Agent](https://github.com/NewLifeX/NewLife.Agent) | 2008 | æœåŠ¡å®‰è£… / 守护进程 / Systemd |
| [NewLife.Zero](https://github.com/NewLifeX/NewLife.Zero) | 2020 | 项目脚手架模æ¿é›†åˆ |
| [NewLife.Redis](https://github.com/NewLifeX/NewLife.Redis) | 2017 | 高性能 Redis 客户端/消æ¯é˜Ÿåˆ— |
| [NewLife.RocketMQ](https://github.com/NewLifeX/NewLife.RocketMQ) | 2018 | 纯托管 RocketMQ 客户端 |
| [NewLife.MQTT](https://github.com/NewLifeX/NewLife.MQTT) | 2019 | 物è”网 MqttClient/MqttServer |
| [NewLife.IoT](https://github.com/NewLifeX/NewLife.IoT) | 2022 | IoT é€šä¿¡æ ‡å‡†æ¨¡åž‹åº“ |
| [NewLife.Modbus](https://github.com/NewLifeX/NewLife.Modbus) | 2022 | Modbus åè®®æ— |
| [NewLife.Siemens](https://github.com/NewLifeX/NewLife.Siemens) | 2022 | 西门å PLC 通信 |
| [NewLife.Map](https://github.com/NewLifeX/NewLife.Map) | 2022 | 地图èšåˆç»„ä»¶ |
| [NewLife.Audio](https://github.com/NewLifeX/NewLife.Audio) | 2023 | 音频编解ç |
| Stardust | 2018 | åˆ†å¸ƒå¼æœåŠ¡å¹³å° (注册/é…ç½®/APM/å‘布) |
| AntJob | 2019 | 分布å¼å¤§æ•°æ®è®¡ç®—å¹³å° |
| ç‰ç‰ | - | 更多å‚è§å®˜ç½‘ |
---
## 团队与版æƒ

新生命团队(NewLife)æˆç«‹äºŽ 2002 年,80+ å¼€æºé¡¹ç›®ï¼ŒNuGet 累计下载 400+ 万。全部项目采用 MIT å议,å¯è‡ªç”±ä¿®æ”¹å†å‘è¡Œï¼ˆæ— éœ€å£°æ˜Žæ¥æºï¼‰ã€‚
网站:https://newlifex.com
å¼€æºï¼šhttps://github.com/NewLifeX
QQ群:1600800 / 1600838
> `新生命团队始于2002年,部分开æºé¡¹ç›®å…·æœ‰20年以上历å²ï¼Œæºç 库ä¿ç•™2010年以æ¥å…¨éƒ¨è®°å½•。`
微信公众å·ï¼š

---
## License
MIT © NewLife. 欢迎商用与二次开å‘。
|