RPC远程过程调用,二进制封装,提供高吞吐低延迟的高性能RPC框架
|
# NewLife.Remoting — Единый фреймворк удалённого взаимодействия (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/v4.0.2026.1024/Doc/AOT兼容性分析.md)
[](https://www.nuget.org/packages/NewLife.Remoting)
[](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/多语言本地化接入.md)
<!-- metrics:end -->


[](https://github.com/NewLifeX/NewLife.Remoting/graphs/contributors)
<!-- lang:start -->
🌐 [English](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.md) | [简体中文](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.zh-CN.md) | [繁體中文](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.zh-TW.md) | [Español](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.es.md) | [Deutsch](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.de.md) | [日本語](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.ja.md) | [Français](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.fr.md) | [Português](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.pt.md) | [한국어](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.ko.md) | [العربية](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.ar.md)
<!-- lang:end -->
NewLife.Remoting — единая инфраструктура удалённого взаимодействия стека NewLife, поставляемая двумя пакетами NuGet:
| Пакет | Назначение | Охват |
|:---|:-----|:------|
| **NewLife.Remoting** | Основная библиотека связи | RPC-клиент/сервер, кодеки протоколов, управление соединениями, потоковые вызовы, базовые классы клиента, конвейер команд, автообновление |
| **NewLife.Remoting.Extensions** | Библиотека расширений | Базовые классы контроллеров сервера, хост Minimal API, службы устройств, аутентификация по токену, шина ответов на команды |
Исходный код: https://github.com/NewLifeX/NewLife.Remoting
> NuGet: `NewLife.Remoting` / `NewLife.Remoting.Extensions`
> ⚠️ Этот перевод может отставать от оригинала; актуальная версия — [английский README](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/README.md).
## Индекс документации
| Документ | Описание |
|------|------|
| [Doc/需求文档.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/需求文档.md) | Требования: видение, цели, функциональные требования (RPC/STRM/CLNT/UPGD/SRV/CMD/AOT/L10N/EXT) |
| [Doc/架构设计.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/架构设计.md) | Архитектура: слои, ключевые модули, управление памятью, стратегия тестирования, проектные решения |
| [Doc/SRV-服务端架构.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/SRV-服务端架构.md) | Архитектура сервера: сервисный слой, основные сценарии (вход/регистрация/выход/heartbeat/обновление/события/команды), жизненный цикл сессий, кластер |
| [Doc/功能清单.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/功能清单.md) | Учёт функций: статус, текущие задачи и список исправлений |
| [Doc/竞品分析.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/竞品分析.md) | Анализ конкурентов: сравнение RPC-фреймворков и доставки команд IoT |
| [Doc/SRMP.MD](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/SRMP.MD) | Спецификация протокола SRMP |
| [Doc/RPC内存管理设计.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/RPC内存管理设计.md) | Управление памятью без копирования |
| [Doc/自动更新机制.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/自动更新机制.md) | Полная схема автообновления |
| [Doc/重试策略.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/重试策略.md) | Политика повторов: `IRetryPolicy` и экспоненциальная задержка |
| [Doc/AOT兼容性分析.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/AOT兼容性分析.md) | Область поддержки NativeAOT, <!--aot-scenarios:start-->23<!--aot-scenarios:end--> проверенных сценариев (smoke <!--aot-smoke:start-->23/23<!--aot-smoke:end-->), рекомендации и известные ограничения |
| [Doc/多语言本地化接入.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/多语言本地化接入.md) | Английские сообщения времени выполнения, таблицы `Locales/*.yml` и руководство по `L.T` |
| [Doc/README多语言规范.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/Doc/README多语言规范.md) | Правила порядка, скрипты и CI-контроль для 11 языков README |
---
## Ключевые возможности
| Возможность | Описание |
|:---------|------|
| **Ядро RPC** | Протокол SRMP, JSON/бинарные кодеки, конвейер запросов, клиент/сервер, управление кластером, метаданные, повторы, полностью асинхронный сервер, трассировка по TraceId |
| **STRM-потоки** | Server-Streaming: `IAsyncEnumerable<T>` передаётся поэлементно через SRMP и SSE |
| **CLNT-клиент** | Вход/heartbeat/обновление/команды/события в одном месте, автоматическое переключение WS/SSE |
| **UPGD-обновление** | Поиск → загрузка → проверка → распаковка → замена → перезапуск |
| **SRV-сервер** | ApiController/BaseController/BaseDeviceController, TokenService, IDeviceService; один и тот же протокол доступен через MVC и Minimal API (зеркальные реализации, закреплённые тестами) |
| **CMD-команды** | SessionManager + широковещательная шина событий + каналы WS/SSE/Ping |
| **L10N-локализация** | Сообщения времени выполнения используют английский как исходный текст; `Locales/*.yml` содержат встроенные таблицы для 31 языка (включая упрощённый и традиционный китайский), при отсутствии перевода — английский; без ResourceManager и сателлитных сборок |
| **Поддержка AOT** | Постоянный анализ AOT для net8.0+ (0 предупреждений в основной библиотеке и Extensions) + собственный генератор кода (таблица диспетчеризации, потоковые насосы, сохранение сигнатур); NativeAOT проверен на <!--aot-scenarios:start-->23<!--aot-scenarios:end--> сценариях, 11 сценариях Minimal API и 6 сценариях устройств XCode (см. документ AOT §8) |
## Быстрый старт
**Пять строк на сервере, пять на клиенте — 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 | 455 000 msg/s |
| Задержка одного RPC | ~41 мкс | — |
| Поддерживаемые платформы | net45 / net461 / netstandard2.0 / netstandard2.1 / net6.0 / net8.0 / net10.0 (в соответствии с NewLife.Core v12; NativeAOT с net8.0) |
## Обновление до v4
v4 соответствует NewLife.Core v12 и меняет сетевой уровень. Перед обновлением:
- **Два порта**: основной порт обслуживает только SRMP; для HTTP явно задайте `HttpPort` (по умолчанию отключён).
- **SRMP через WebSocket больше не поддерживается**: адреса `ws://`/`wss://` теперь вызывают `NotSupportedException`; используйте `tcp://`/`udp://` для SRMP и `http(s)://` для HTTP-вызовов.
- **Собственные типы кодеков удалены**: `WsClient`, `HttpCodec`, `WebSocketClientCodec`, `WebSocketServerCodec` и методы кадров `HttpMessage` удалены; HTTP обрабатывает `HttpServer` из Core, а для пользовательского кадрирования реализуйте `IMessageCodec`.
- **Английские ключи сообщений**: сообщения времени выполнения используют английский исходный текст как ключ; сравнивайте `ApiCode` или коды ошибок вместо локализованного текста.
- **Целевые платформы**: активы net5.0/net7.0/net9.0 больше не поставляются; NuGet автоматически переходит на ближайшую поддерживаемую платформу.
Полный список см. в [ChangeLog.md](/NewLife/NewLife.Remoting/Blob/v4.0.2026.1024/ChangeLog.md).
---
## Совместная работа с другими компонентами NewLife
| Компонент | Ценность |
| ---- | -------- |
| NewLife.Core | Логирование, конфигурация, сериализация, локализация, пул объектов, TimerX, трассировка |
| NewLife.Net | Высокопроизводительный сетевой стек, WebSocket/кодеки, повторное использование портов |
| NewLife.Redis | Распределённый кэш / очередь сообщений для общих сессий и fan-out |
| Stardust | Регистрация узлов, центр конфигурации, APM, центр публикации |
| AntJob | Планирование задач и распределённые вычисления через ClientBase |
| NewLife.MQTT / Modbus / IoT | Сбор данных устройств и передача через Remoting |
## Участие и обратная связь
Приветствуются: сообщения об ошибках, PR по производительности, новые кодеки, примеры контроллеров, документация и новые переводы.
В issue указывайте: окружение, целевую платформу, минимальный пример и фрагмент журнала.
---
## Карта экосистемы
NewLife — это многоуровневая экосистема независимо версионируемых open-source проектов. Карта ниже дословно используется во всех репозиториях NewLife; каждый проект ссылается на свой репозиторий и свой основной пакет NuGet.
| Проект | Что делает | Загрузки |
| --- | --- | --- |
| **Базовый** | | |
| [NewLife.Core](https://github.com/NewLifeX/X) | Логирование, конфигурация, кэширование, сеть, сериализация, планирование и APM-трассировка. | [](https://www.nuget.org/packages/NewLife.Core) |
| [NewLife.XCode](https://github.com/NewLifeX/NewLife.XCode) | Промежуточное ПО данных: отдельные таблицы масштаба десятков миллиардов строк, автоматическое секционирование, разделение чтения и записи, более 10 баз данных. | [](https://www.nuget.org/packages/NewLife.XCode) |
| [NewLife.Net](https://github.com/NewLifeX/NewLife.Net) | Высокопроизводительная сетевая библиотека: 1,77M pps / 14,5 Гбит/с на машину (TCP 1KB, 2026-10), 4M долгоживущих TCP-соединений. | [](https://www.nuget.org/packages/NewLife.Net) |
| [NewLife.Remoting](https://github.com/NewLifeX/NewLife.Remoting) | Протокольная связь и RPC-фреймворк для клиент-серверных приложений и IoT-устройств. | [](https://www.nuget.org/packages/NewLife.Remoting) |
| [NewLife.Agent](https://github.com/NewLifeX/NewLife.Agent) | Устанавливает .NET-приложения как демоны ОС: службы Windows и systemd в Linux. | [](https://www.nuget.org/packages/NewLife.Agent) |
| [NewLife.Templates](https://github.com/NewLifeX/NewLife.Zero) | Шаблоны проектов `dotnet new` для консоли, web, API, службы, данных и IoT. | [](https://www.nuget.org/packages/NewLife.Templates) |
| **Данные и обмен сообщениями** | | |
| [NewLife.Redis](https://github.com/NewLifeX/NewLife.Redis) | Клиент Redis с микросекундной задержкой, миллионами операций в секунду и встроенными очередями сообщений. | [](https://www.nuget.org/packages/NewLife.Redis) |
| [NewLife.RocketMQ](https://github.com/NewLifeX/NewLife.RocketMQ) | Полностью управляемый клиент RocketMQ для Apache RocketMQ и Alibaba Cloud Message Queue. | [](https://www.nuget.org/packages/NewLife.RocketMQ) |
| [NewLife.MQTT](https://github.com/NewLifeX/NewLife.MQTT) | Клиент и сервер MQTT, включая подключение к Alibaba Cloud IoT. | [](https://www.nuget.org/packages/NewLife.MQTT) |
| [NewLife.NovaDb](https://github.com/NewLifeX/NewLife.NovaDb) | Гибридная база данных на C#: встроенная или сетевая, реляционная, временных рядов, очередь сообщений и KV в одном. | [](https://www.nuget.org/packages/NewLife.NovaDb) |
| [NewLife.MySql](https://github.com/NewLifeX/NewLife.MySql) | Драйвер MySql и вспомогательный слой на основе стека данных NewLife. | [](https://www.nuget.org/packages/NewLife.MySql) |
| **Web, AI и распределённые системы** | | |
| [NewLife.Cube](https://github.com/NewLifeX/NewLife.Cube) | Фреймворк быстрой разработки админ-платформ: права, SSO, сервер OAuth и CRUD-скаффолдинг. | [](https://www.nuget.org/packages/NewLife.Cube) |
| [Stardust](https://github.com/NewLifeX/Stardust) | Распределённая сервисная платформа: управление узлами, APM, центр конфигурации, реестр и центр публикации. | [](https://www.nuget.org/packages/NewLife.Stardust) |
| [AntJob](https://github.com/NewLifeX/AntJob) | Распределённая платформа задач и планирования данных в реальном времени с секционированием, повторами и дозаполнением. | [](https://www.nuget.org/packages/NewLife.AntJob) |
| [NewLife.AI](https://github.com/NewLifeX/NewLife.AI) | Единый клиент для 46 поставщиков LLM плюс ChatAI — готовое веб-приложение для чата. | [](https://www.nuget.org/packages/NewLife.AI) |
| **Промышленность и IoT** | | |
| [NewLife.IoT](https://github.com/NewLifeX/NewLife.IoT) | Стандартная библиотека IoT, определяющая контракты протоколов и абстракции устройств. | [](https://www.nuget.org/packages/NewLife.IoT) |
| [NewLife.Modbus](https://github.com/NewLifeX/NewLife.Modbus) | Реализация Modbus TCP/RTU/ASCII поверх NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Modbus) |
| [NewLife.Siemens](https://github.com/NewLifeX/NewLife.Siemens) | Протокол Siemens PLC поверх NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Siemens) |
| [NewLife.Omron](https://github.com/NewLifeX/NewLife.Omron) | Протокол Omron PLC поверх NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Omron) |
| [NewLife.Melsec](https://github.com/NewLifeX/NewLife.Melsec) | Протокол Mitsubishi Melsec PLC поверх NewLife.IoT. | [](https://www.nuget.org/packages/NewLife.Melsec) |
| [NewLife.OPC](https://github.com/NewLifeX/NewLife.OPC) | Клиент OPC для доступа к промышленным данным. | — |
| [NewLife.BACnet](https://github.com/NewLifeX/NewLife.BACnet) | Стек протокола автоматизации зданий BACnet. | [](https://www.nuget.org/packages/NewLife.BACnet) |
| [ZeroIoT](https://github.com/NewLifeX/ZeroIoT) | Лёгкая open-source платформа IoT с управлением шлюзами и устройствами. | — |
| **Телематика транспорта** | | |
| [NewLife.JT808](https://github.com/NewLifeX/NewLife.JT808) | Протокол позиционирования транспорта JT/T 808: более 70 типов сообщений, 2011/2013/2019. | [](https://www.nuget.org/packages/NewLife.JT808) |
| [NewLife.JT809](https://github.com/NewLifeX/NewLife.JT809) | Межплатформенный протокол JT/T 809 для органов управления транспортом. | [](https://www.nuget.org/packages/NewLife.JT809) |
| [NewLife.JT1078](https://github.com/NewLifeX/NewLife.JT1078) | Автомобильное видео JT/T 1078: разбор RTP, ремультиплексирование в FLV/fMP4 и прямая трансляция. | [](https://www.nuget.org/packages/NewLife.JT1078) |
| **Прикладные компоненты** | | |
| [NewLife.Office](https://github.com/NewLifeX/NewLife.Office) | Один пакет для Excel, Word, PPT, PDF и более 15 форматов документов. | [](https://www.nuget.org/packages/NewLife.Office) |
| [NewLife.Audio](https://github.com/NewLifeX/NewLife.Audio) | Кроссплатформенное аудио: кодеки, ввод-вывод устройств, DSP, контейнеры и потоковая передача. | [](https://www.nuget.org/packages/NewLife.Audio) |
| [NewLife.Video](https://github.com/NewLifeX/NewLife.Video) | Видеокодеки, форматы контейнеров, обработка кадров и потоковая передача. | [](https://www.nuget.org/packages/NewLife.Video) |
| [NewLife.Map](https://github.com/NewLifeX/NewLife.Map) | Единый интерфейс к Baidu, AMap, Tencent и Tianditu с геокодированием и преобразованием координат. | [](https://www.nuget.org/packages/NewLife.Map) |
| [NewLife.IP](https://github.com/NewLifeX/NewLife.IP) | Геолокация IPv4 с офлайн-базой, отображаемой в память, и онлайн-API как резервом. | [](https://www.nuget.org/packages/NewLife.IP) |
| **Инструменты и продукты** | | |
| [CrazyCoder](https://github.com/NewLifeX/XCoder) | Инструменты разработчика: сеть, последовательный порт, шифрование, регулярные выражения, Modbus и MQTT. | [](https://www.nuget.org/packages/NewLife.XCoder) |
| [GitCandy](https://github.com/NewLifeX/GitCandy) | Самостоятельно размещаемая система управления исходным кодом Git. | — |
| [LuckyClover](https://github.com/NewLifeX/LuckyClover) | Автоматически устанавливает подходящую среду выполнения .NET при запуске на старом хосте. | — |
> Бейджи показывают основной пакет каждого проекта; пакеты тем, расширений и сателлитов перечислены на соответствующих страницах NuGet.Более 30 пакетов, не перечисленных здесь (FTP, LoRa, расширения Office, драйверы протоколов и другие), доступны в [организации NewLifeX](https://github.com/NewLifeX) и на [newlifex.com](https://newlifex.com).
---
## Команда
<img src="https://newlifex.com/logo.png" width="48" align="right" alt="NewLife" />
Команда NewLife основана в 2002 году и более двух десятилетий работает в экосистеме .NET и IoT, поддерживает около 100 проектов с открытым кодом (34 из них — основные) и предлагает интегрированные программно-аппаратные решения для энергетики, логистики, здравоохранения, промышленной автоматизации и интернет-отрасли. Мы следуем девизу «в учении нет старших — мастерство приносит уважение».
Open-source компоненты скачали <!--nuget-total:start-->6.48M<!--nuget-total:end--> раз с NuGet (по всей экосистеме, по состоянию на 2026-10).
Сайт: https://newlifex.com · Организация open source: https://github.com/NewLifeX
<details>
<summary>Официальный аккаунт WeChat: 智能大石头 (отсканируйте, чтобы подписаться)</summary>

</details>
---
## Лицензия
MIT © NewLife. Коммерческое использование и доработка приветствуются.
|