RPC远程过程调用,二进制封装,提供高吞吐低延迟的高性能RPC框架
|
# NewLife.Remoting — Estrutura unificada de comunicação remota (RPC + HTTP + WebSocket + SRMP)







[](https://github.com/NewLifeX/NewLife.Remoting/actions/workflows/aot.yml)
[](https://github.com/NewLifeX/NewLife.Remoting/actions/workflows/test.yml)
<!-- metrics:start -->
[](/NewLife/NewLife.Remoting/Blob/master/Doc/AOT兼容性分析.md)
[](https://www.nuget.org/packages/NewLife.Remoting)
[](/NewLife/NewLife.Remoting/Blob/master/Doc/多语言本地化接入.md)
<!-- metrics:end -->


[](https://github.com/NewLifeX/NewLife.Remoting/graphs/contributors)
<!-- lang:start -->
🌐 [English](/NewLife/NewLife.Remoting/Blob/master/README.md) | [简体中文](/NewLife/NewLife.Remoting/Blob/master/README.zh-CN.md) | [繁體中文](/NewLife/NewLife.Remoting/Blob/master/README.zh-TW.md) | [Español](/NewLife/NewLife.Remoting/Blob/master/README.es.md) | [Deutsch](/NewLife/NewLife.Remoting/Blob/master/README.de.md) | [日本語](/NewLife/NewLife.Remoting/Blob/master/README.ja.md) | [Français](/NewLife/NewLife.Remoting/Blob/master/README.fr.md) | [Русский](/NewLife/NewLife.Remoting/Blob/master/README.ru.md) | [한국어](/NewLife/NewLife.Remoting/Blob/master/README.ko.md) | [العربية](/NewLife/NewLife.Remoting/Blob/master/README.ar.md)
<!-- lang:end -->
NewLife.Remoting é a infraestrutura unificada de comunicação remota da pilha NewLife, distribuída em dois pacotes NuGet:
| Pacote | Papel | Cobertura |
|:---|:-----|:------|
| **NewLife.Remoting** | Biblioteca de comunicação principal | Cliente/servidor RPC, codecs de protocolo, gerenciamento de conexões, chamadas em streaming, classes base de cliente, pipeline de comandos, atualização automática |
| **NewLife.Remoting.Extensions** | Biblioteca de extensões | Classes base de controllers de servidor, host Minimal API, serviços de dispositivos, autenticação por token, barramento de respostas de comandos |
Código-fonte: https://github.com/NewLifeX/NewLife.Remoting
> NuGet: `NewLife.Remoting` / `NewLife.Remoting.Extensions`
> ⚠️ Esta tradução pode ficar desatualizada; a versão autorizada é o [README em inglês](/NewLife/NewLife.Remoting/Blob/master/README.md).
## Índice de documentação
| Documento | Descrição |
|------|------|
| [Doc/需求文档.md](/NewLife/NewLife.Remoting/Blob/master/Doc/需求文档.md) | Requisitos: visão, objetivos, requisitos funcionais (RPC/STRM/CLNT/UPGD/SRV/CMD/AOT/L10N/EXT) |
| [Doc/架构设计.md](/NewLife/NewLife.Remoting/Blob/master/Doc/架构设计.md) | Arquitetura: camadas, módulos principais, gerenciamento de memória, estratégia de testes, decisões de projeto |
| [Doc/SRV-服务端架构.md](/NewLife/NewLife.Remoting/Blob/master/Doc/SRV-服务端架构.md) | Arquitetura do servidor: camada de serviço, fluxos principais (login/registro/logout/heartbeat/atualização/eventos/comandos), ciclo de vida das sessões e cluster |
| [Doc/功能清单.md](/NewLife/NewLife.Remoting/Blob/master/Doc/功能清单.md) | Acompanhamento de funcionalidades: status, itens em andamento e backlog |
| [Doc/竞品分析.md](/NewLife/NewLife.Remoting/Blob/master/Doc/竞品分析.md) | Análise competitiva: frameworks RPC e envio de comandos IoT |
| [Doc/SRMP.MD](/NewLife/NewLife.Remoting/Blob/master/Doc/SRMP.MD) | Especificação do protocolo SRMP |
| [Doc/RPC内存管理设计.md](/NewLife/NewLife.Remoting/Blob/master/Doc/RPC内存管理设计.md) | Gerenciamento de memória sem cópia |
| [Doc/自动更新机制.md](/NewLife/NewLife.Remoting/Blob/master/Doc/自动更新机制.md) | Projeto completo da atualização automática |
| [Doc/重试策略.md](/NewLife/NewLife.Remoting/Blob/master/Doc/重试策略.md) | Política de retentativa: `IRetryPolicy` e backoff exponencial |
| [Doc/AOT兼容性分析.md](/NewLife/NewLife.Remoting/Blob/master/Doc/AOT兼容性分析.md) | Escopo do NativeAOT, <!--aot-scenarios:start-->23<!--aot-scenarios:end--> cenários verificados (smoke <!--aot-smoke:start-->23/23<!--aot-smoke:end-->), orientação e limites conhecidos |
| [Doc/多语言本地化接入.md](/NewLife/NewLife.Remoting/Blob/master/Doc/多语言本地化接入.md) | Mensagens em inglês, tabelas `Locales/*.yml` e guia de `L.T` |
| [Doc/README多语言规范.md](/NewLife/NewLife.Remoting/Blob/master/Doc/README多语言规范.md) | Regras de ordenação, scripts e gate de CI para os 11 idiomas do README |
---
## Destaques
| Capacidade | Descrição |
|:---------|------|
| **Núcleo RPC** | Protocolo SRMP, codecs JSON/binário, pipeline de requisições, cliente/servidor, gerenciamento de cluster, metadados, retentativas, servidor totalmente assíncrono, rastreamento por TraceId |
| **STRM streaming** | Server-Streaming: `IAsyncEnumerable<T>` enviado item a item por SRMP e SSE |
| **CLNT cliente base** | Login/heartbeat/atualização/comandos/eventos em um só lugar, alternância automática WS/SSE |
| **UPGD atualização** | Detectar → baixar → verificar → extrair → sobrescrever → reiniciar |
| **SRV base do servidor** | ApiController/BaseController/BaseDeviceController, TokenService, IDeviceService; o mesmo endpoint é exposto em MVC e em Minimal API (implementações espelhadas validadas por testes) |
| **CMD comandos** | SessionManager + broadcast por barramento de eventos + canais WS/SSE/Ping |
| **L10N localização** | As mensagens usam inglês como texto de origem; `Locales/*.yml` fornecem 31 idiomas integrados (incluindo chinês simplificado e tradicional), com fallback para inglês; sem ResourceManager nem assemblies satélite |
| **Suporte AOT** | Análise AOT permanente a partir do net8.0 (0 avisos na biblioteca principal e no Extensions) + gerador de código próprio (tabela de despacho, bombas de streaming, preservação de assinaturas); NativeAOT validado em <!--aot-scenarios:start-->23<!--aot-scenarios:end--> cenários, 11 do host Minimal API e 6 da cadeia de dispositivos XCode (ver doc AOT §8) |
## Início rápido
**Cinco linhas no servidor, cinco no cliente e o RPC funciona:**
```csharp
// === Servidor ===
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}";
// Streaming: retornar IAsyncEnumerable<T> envia item a item
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}";
}
}
}
// === Cliente ===
var client = new ApiClient("tcp://127.0.0.1:12345");
client.Open();
// Chamada normal
var rs = await client.InvokeAsync<String>("My/Ping", new { name = "dev" });
// Chamada em streaming — recebe cada envio do servidor
await foreach (var log in client.InvokeStreamAsync<String>("My/StreamLogs", new { count = 10 }))
Console.WriteLine(log);
// Metadados (TraceId é injetado automaticamente)
client.Headers["TenantId"] = "tenant-01";
```
## Desempenho
| Métrica | Típico | Pico em laboratório |
|:----|:------:|:--------:|
| Conexões TCP longas | 10.000 | 4.000.000 |
| Throughput RPC | 100.000 TPS | 455.000 msg/s |
| Latência por RPC | ~41 μs | — |
| Frameworks | net45 / net461 / netstandard2.0 / netstandard2.1 / net6.0 / net8.0 / net10.0 (alinhado ao NewLife.Core v12; NativeAOT a partir do net8.0) |
## Atualização para v4
O v4 alinha-se ao NewLife.Core v12 e altera a camada de rede. Antes de atualizar:
- **Duas portas**: a porta principal atende apenas SRMP; defina `HttpPort` explicitamente para habilitar HTTP (desativado por padrão).
- **Sem SRMP sobre WebSocket**: endereços `ws://`/`wss://` agora lançam `NotSupportedException`; use `tcp://`/`udp://` para SRMP e `http(s)://` para chamadas HTTP.
- **Tipos de codec removidos**: `WsClient`, `HttpCodec`, `WebSocketClientCodec`, `WebSocketServerCodec` e os métodos de quadro de `HttpMessage` foram removidos; o HTTP é tratado pelo `HttpServer` do Core, e o enquadramento personalizado deve implementar `IMessageCodec`.
- **Chaves de mensagens em inglês**: mensagens de runtime usam o texto inglês como chave; compare `ApiCode` ou códigos de erro em vez do texto localizado.
- **Frameworks de destino**: os ativos net5.0/net7.0/net9.0 não são mais distribuídos; o NuGet recorre automaticamente ao framework compatível mais próximo.
Consulte [ChangeLog.md](/NewLife/NewLife.Remoting/Blob/master/ChangeLog.md) para a lista completa.
---
## Cooperação com outros componentes NewLife
| Componente | Valor |
| ---- | -------- |
| NewLife.Core | Log, configuração, serialização, localização, pool de objetos, TimerX, rastreamento |
| NewLife.Net | Pilha de rede de alto desempenho, WebSocket/codecs, reutilização de portas |
| NewLife.Redis | Cache distribuído / fila de mensagens para sessões compartilhadas ou fan-out |
| Stardust | Registro de nós, central de configuração, APM, central de releases |
| AntJob | Agendamento de tarefas e computação distribuída via ClientBase |
| NewLife.MQTT / Modbus / IoT | Coleta de protocolos de dispositivos e envio ascendente via Remoting |
## Contribuições e feedback
Bem-vindos: relatos de bugs, PRs de desempenho, novos codecs, exemplos de controllers, documentação e novas traduções.
Em issues, informe: ambiente, framework de destino, reprodução mínima e trecho de log.
---
## Mapa do ecossistema
NewLife é um ecossistema em camadas de projetos open source versionados de forma independente. O mapa abaixo é compartilhado literalmente por todos os repositórios NewLife; cada projeto tem links para o seu repositório e para o seu pacote principal no NuGet.
| Projeto | O que faz | Downloads |
| --- | --- | --- |
| **Base** | | |
| [NewLife.Core](https://github.com/NewLifeX/X) | Log, configuração, cache, rede, serialização, agendamento e rastreamento APM. | [](https://www.nuget.org/packages/NewLife.Core) |
| [NewLife.XCode](https://github.com/NewLifeX/NewLife.XCode) | Middleware de dados: tabelas únicas na escala de dezenas de bilhões de linhas, particionamento automático, separação de leitura e escrita, mais de 10 bancos de dados. | [](https://www.nuget.org/packages/NewLife.XCode) |
| [NewLife.Net](https://github.com/NewLifeX/NewLife.Net) | Biblioteca de rede de alto desempenho: 1,77M pps / 14,5 Gbps em uma máquina (TCP 1KB, 2026-10), 4M de conexões TCP persistentes. | [](https://www.nuget.org/packages/NewLife.Net) |
| [NewLife.Remoting](https://github.com/NewLifeX/NewLife.Remoting) | Framework de comunicação por protocolo e RPC para aplicações cliente/servidor e dispositivos IoT. | [](https://www.nuget.org/packages/NewLife.Remoting) |
| [NewLife.Agent](https://github.com/NewLifeX/NewLife.Agent) | Instala aplicações .NET como daemons do sistema operacional: serviços do Windows e systemd do Linux. | [](https://www.nuget.org/packages/NewLife.Agent) |
| [NewLife.Templates](https://github.com/NewLifeX/NewLife.Zero) | Modelos de projeto `dotnet new` para console, web, API, serviço, dados e IoT. | [](https://www.nuget.org/packages/NewLife.Templates) |
| **Dados e mensagens** | | |
| [NewLife.Redis](https://github.com/NewLifeX/NewLife.Redis) | Cliente Redis com latência em microssegundos, milhões de operações por segundo e filas de mensagens integradas. | [](https://www.nuget.org/packages/NewLife.Redis) |
| [NewLife.RocketMQ](https://github.com/NewLifeX/NewLife.RocketMQ) | Cliente RocketMQ totalmente gerenciado para Apache RocketMQ e Alibaba Cloud Message Queue. | [](https://www.nuget.org/packages/NewLife.RocketMQ) |
| [NewLife.MQTT](https://github.com/NewLifeX/NewLife.MQTT) | Cliente e servidor MQTT, incluindo conectividade com o Alibaba Cloud IoT. | [](https://www.nuget.org/packages/NewLife.MQTT) |
| [NewLife.NovaDb](https://github.com/NewLifeX/NewLife.NovaDb) | Banco de dados híbrido em C#: embarcado ou em rede, relacional, séries temporais, fila de mensagens e KV em um só. | [](https://www.nuget.org/packages/NewLife.NovaDb) |
| [NewLife.MySql](https://github.com/NewLifeX/NewLife.MySql) | Driver MySql e camada auxiliar construídos sobre a pilha de dados NewLife. | [](https://www.nuget.org/packages/NewLife.MySql) |
| **Web, IA e distribuído** | | |
| [NewLife.Cube](https://github.com/NewLifeX/NewLife.Cube) | Framework de plataforma administrativa rápida: permissões, SSO, servidor OAuth e scaffolding CRUD. | [](https://www.nuget.org/packages/NewLife.Cube) |
| [Stardust](https://github.com/NewLifeX/Stardust) | Plataforma de serviços distribuídos: gestão de nós, APM, centro de configuração, registro e centro de publicação. | [](https://www.nuget.org/packages/NewLife.Stardust) |
| [AntJob](https://github.com/NewLifeX/AntJob) | Plataforma distribuída de tarefas e agendamento de dados em tempo real, com particionamento, repetição e reprocessamento. | [](https://www.nuget.org/packages/NewLife.AntJob) |
| [NewLife.AI](https://github.com/NewLifeX/NewLife.AI) | Cliente unificado para 46 provedores de LLM, além do ChatAI, uma aplicação web de chat pronta para uso. | [](https://www.nuget.org/packages/NewLife.AI) |
| **Industrial e IoT** | | |
| [NewLife.IoT](https://github.com/NewLifeX/NewLife.IoT) | Biblioteca padrão de IoT que define contratos de protocolo e abstrações de dispositivos. | [](https://www.nuget.org/packages/NewLife.IoT) |
| [NewLife.Modbus](https://github.com/NewLifeX/NewLife.Modbus) | Implementação Modbus TCP/RTU/ASCII sobre NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Modbus) |
| [NewLife.Siemens](https://github.com/NewLifeX/NewLife.Siemens) | Protocolo Siemens PLC sobre NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Siemens) |
| [NewLife.Omron](https://github.com/NewLifeX/NewLife.Omron) | Protocolo Omron PLC sobre NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Omron) |
| [NewLife.Melsec](https://github.com/NewLifeX/NewLife.Melsec) | Protocolo Mitsubishi Melsec PLC sobre NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Melsec) |
| [NewLife.OPC](https://github.com/NewLifeX/NewLife.OPC) | Cliente OPC para acesso a dados industriais. | — |
| [NewLife.BACnet](https://github.com/NewLifeX/NewLife.BACnet) | Pilha do protocolo de automação predial BACnet. | [](https://www.nuget.org/packages/NewLife.BACnet) |
| [ZeroIoT](https://github.com/NewLifeX/ZeroIoT) | Plataforma IoT de código aberto leve, com gestão de gateways e dispositivos. | — |
| **Telemática veicular** | | |
| [NewLife.JT808](https://github.com/NewLifeX/NewLife.JT808) | Protocolo de posicionamento veicular JT/T 808: mais de 70 corpos de mensagem, 2011/2013/2019. | [](https://www.nuget.org/packages/NewLife.JT808) |
| [NewLife.JT809](https://github.com/NewLifeX/NewLife.JT809) | Protocolo plataforma-a-plataforma JT/T 809 para autoridades de transporte. | [](https://www.nuget.org/packages/NewLife.JT809) |
| [NewLife.JT1078](https://github.com/NewLifeX/NewLife.JT1078) | Vídeo veicular JT/T 1078: análise RTP, remux para FLV/fMP4 e transmissão ao vivo. | [](https://www.nuget.org/packages/NewLife.JT1078) |
| **Componentes de domínio** | | |
| [NewLife.Office](https://github.com/NewLifeX/NewLife.Office) | Um pacote para Excel, Word, PPT, PDF e mais de 15 formatos de documento. | [](https://www.nuget.org/packages/NewLife.Office) |
| [NewLife.Audio](https://github.com/NewLifeX/NewLife.Audio) | Áudio multiplataforma: codecs, E/S de dispositivos, DSP, contêineres e streaming. | [](https://www.nuget.org/packages/NewLife.Audio) |
| [NewLife.Video](https://github.com/NewLifeX/NewLife.Video) | Codecs de vídeo, formatos de contêiner, processamento de frames e streaming. | [](https://www.nuget.org/packages/NewLife.Video) |
| [NewLife.Map](https://github.com/NewLifeX/NewLife.Map) | Interface unificada sobre Baidu, AMap, Tencent e Tianditu, com geocodificação e conversão de coordenadas. | [](https://www.nuget.org/packages/NewLife.Map) |
| [NewLife.IP](https://github.com/NewLifeX/NewLife.IP) | Geolocalização IPv4 com banco de dados offline mapeado em memória e API online como alternativa. | [](https://www.nuget.org/packages/NewLife.IP) |
| **Ferramentas e produtos** | | |
| [CrazyCoder](https://github.com/NewLifeX/XCoder) | Caixa de ferramentas do desenvolvedor: rede, porta serial, criptografia, regex, Modbus e MQTT. | [](https://www.nuget.org/packages/NewLife.XCoder) |
| [GitCandy](https://github.com/NewLifeX/GitCandy) | Sistema auto-hospedado de gerenciamento de código-fonte Git. | — |
| [LuckyClover](https://github.com/NewLifeX/LuckyClover) | Instala automaticamente o runtime .NET correspondente quando iniciado em um host mais antigo. | — |
> Os badges mostram o pacote principal de cada projeto; pacotes de tema, extensão e satélites estão listados nas respectivas páginas do NuGet.Os mais de 30 pacotes não listados aqui (FTP, LoRa, extensões do Office, drivers de protocolo e outros) estão disponíveis na [organização NewLifeX](https://github.com/NewLifeX) e em [newlifex.com](https://newlifex.com).
---
## Equipe
<img src="https://newlifex.com/logo.png" width="48" align="right" alt="NewLife" />
Fundada em 2002, a equipe NewLife dedica-se há mais de duas décadas ao ecossistema .NET e de IoT, mantém cerca de 100 projetos de código aberto (34 deles principais) e oferece soluções integradas de software e hardware para os setores de energia, logística, saúde, controle industrial e internet. Seguimos o lema "não há hierarquia no aprendizado — o domínio conquista o respeito".
Os componentes de código aberto já foram baixados <!--nuget-total:start-->6.48M<!--nuget-total:end--> vezes no NuGet (todo o ecossistema, até 2026-10).
Website: https://newlifex.com · Organização de código aberto: https://github.com/NewLifeX
<details>
<summary>Conta oficial no WeChat: 智能大石头 (escaneie para seguir)</summary>

</details>
---
## Licença
MIT © NewLife. Uso comercial e desenvolvimento derivado são bem-vindos.
|