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.ru.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) | 서버 아키텍처: 서비스 계층, 핵심 흐름(로그인/등록/로그아웃/하트비트/업그레이드/이벤트/명령), 세션 수명 주기, 클러스터 배포 |
| [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--> 시나리오 실측(스모크 <!--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) | README 11개 언어의 정렬 규칙, 생성 스크립트, CI 게이트 |
---
## 주요 특징
| 기능 | 설명 |
|:---------|------|
| **RPC 핵심** | SRMP 프로토콜, JSON/바이너리 코덱, 요청 파이프라인, 클라이언트/서버, 클러스터 연결 관리, 메타데이터 전달, 재시도, 서버 전 구간 비동기화, TraceId 추적 |
| **STRM 스트리밍** | 서버 스트리밍: `IAsyncEnumerable<T>`를 SRMP와 SSE로 항목별 전송 |
| **CLNT 클라이언트 기본** | 로그인/하트비트/업그레이드/명령/이벤트를 한곳에서, WS/SSE 자동 전환 |
| **UPGD 자동 업데이트** | 감지 → 다운로드 → 검증 → 압축 해제 → 덮어쓰기 → 재시작 |
| **SRV 서버 기본** | ApiController/BaseController/BaseDeviceController, TokenService, IDeviceService; 동일 엔드포인트를 MVC와 Minimal API 두 방식으로 제공(미러 구현을 테스트로 고정) |
| **CMD 명령 전송** | SessionManager + 이벤트 버스 브로드캐스트 + WS/SSE/Ping 채널 |
| **L10N 다국어** | 런타임 메시지는 영어를 원문으로 사용하고 `Locales/*.yml`이 31개 언어를 내장(중국어 간체/번체 포함)하며 미번역 시 영어로 폴백. ResourceManager와 위성 어셈블리 불필요 |
| **AOT 지원** | net8.0+에서 AOT 분석 상시 사용(핵심 라이브러리 0 경고 / Extensions 0 경고) + 자체 소스 생성기(액션 디스패치 표, 스트림 펌프, 시그니처 유지). 핵심 <!--aot-scenarios:start-->23<!--aot-scenarios:end--> 시나리오, Extensions Minimal API 11 시나리오, XCode 장치 경로 6 시나리오를 NativeAOT로 실측(AOT 문서 §8) |
## 빠른 시작
**서버 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 | 455,000 msg/s |
| RPC 1회 지연 | 약 41 μs | — |
| 프레임워크 지원 | net45 / net461 / netstandard2.0 / netstandard2.1 / net6.0 / net8.0 / net10.0 (NewLife.Core v12 기준, net8.0+ NativeAOT) |
## v4 업그레이드
v4는 NewLife.Core v12에 맞춰 네트워크 계층을 변경합니다. 업그레이드 전에 확인하세요:
- **이중 포트**: 기본 포트는 SRMP만 처리합니다. HTTP를 사용하려면 `HttpPort`를 명시적으로 설정하세요(기본적으로 꺼짐).
- **WebSocket 기반 SRMP 제거**: `ws://`/`wss://` 주소는 이제 `NotSupportedException`을 발생시킵니다. SRMP에는 `tcp://`/`udp://`, HTTP 호출에는 `http(s)://`를 사용하세요.
- **자체 코덱 형식 제거**: `WsClient`, `HttpCodec`, `WebSocketClientCodec`, `WebSocketServerCodec` 및 `HttpMessage` 프레임 메서드가 삭제되었습니다. HTTP는 Core `HttpServer`가 처리하며, 사용자 지정 프레이밍은 `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 | 분산 캐시 / 메시지 큐로 세션 공유와 푸시 팬아웃 확장 |
| Stardust | 노드 등록, 구성 센터, APM, 배포 센터 |
| AntJob | ClientBase로 작업 스케줄링과 분산 컴퓨팅 |
| NewLife.MQTT / Modbus / IoT | 장치 프로토콜 수집 후 Remoting으로 상향 전송 |
## 기여와 피드백
환영합니다: 버그 제보 / 성능 개선 PR / 새 프로토콜 코덱 / 컨트롤러 예제 / 문서 보강 / 새 언어 번역.
이슈에는 실행 환경, 대상 프레임워크, 최소 재현 코드, 로그 발췌를 포함해 주세요.
---
## 생태계 지도
NewLife는 독립적으로 버전이 관리되는 오픈소스 프로젝트의 계층형 생태계입니다. 아래 지도는 모든 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) | 고성능 네트워크 라이브러리: 단일 노드 177만 pps, 14.5 Gbps(TCP 1KB, 2026-10 실측), 400만 Tcp 장기 연결. | [](https://www.nuget.org/packages/NewLife.Net) |
| [NewLife.Remoting](https://github.com/NewLifeX/NewLife.Remoting) | CS 애플리케이션과 IoT 장치를 위한 프로토콜 통신 및 RPC 프레임워크. | [](https://www.nuget.org/packages/NewLife.Remoting) |
| [NewLife.Agent](https://github.com/NewLifeX/NewLife.Agent) | .NET 애플리케이션을 운영체제 데몬으로 설치: Windows 서비스와 Linux systemd. | [](https://www.nuget.org/packages/NewLife.Agent) |
| [NewLife.Templates](https://github.com/NewLifeX/NewLife.Zero) | 콘솔, Web, API, 서비스, 데이터, IoT용 `dotnet new` 프로젝트 템플릿. | [](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) | Apache RocketMQ와 알리바바 클라우드 메시지 큐를 지원하는 순수 관리형 RocketMQ 클라이언트. | [](https://www.nuget.org/packages/NewLife.RocketMQ) |
| [NewLife.MQTT](https://github.com/NewLifeX/NewLife.MQTT) | MQTT 클라이언트와 서버, 알리바바 클라우드 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) | NewLife 데이터 스택 위에 구축한 MySql 드라이버와 도우미 계층. | [](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) | NewLife.IoT 기반으로 구현한 Modbus TCP/RTU/ASCII. | [](https://www.nuget.org/packages/NewLife.Modbus) |
| [NewLife.Siemens](https://github.com/NewLifeX/NewLife.Siemens) | NewLife.IoT 기반으로 구현한 지멘스 PLC 프로토콜. | [](https://www.nuget.org/packages/NewLife.Siemens) |
| [NewLife.Omron](https://github.com/NewLifeX/NewLife.Omron) | NewLife.IoT 기반으로 구현한 오므론 PLC 프로토콜. | [](https://www.nuget.org/packages/NewLife.Omron) |
| [NewLife.Melsec](https://github.com/NewLifeX/NewLife.Melsec) | NewLife.IoT 기반으로 구현한 미쓰비시 Melsec PLC 프로토콜. | [](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) | 게이트웨이와 장치 관리를 갖춘 경량 오픈소스 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) | 크로스 플랫폼 오디오: 코덱, 장치 IO, 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) | 바이두/고덕/텐센트/톈디투 지도 통합 인터페이스, 지오코딩과 좌표 변환 지원. | [](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년에 설립되어 20여 년간 .NET과 IoT 기술 생태계에 집중하며 100여 개의 오픈소스 프로젝트를 주도하고(이 중 34개가 핵심 프로젝트), 전력, 물류, 의료, 산업 제어, 인터넷 등 산업에 소프트웨어와 하드웨어를 아우르는 통합 솔루션을 제공해 왔습니다. "학문에는 선후가 없으며, 이룬 사람이 스승이다"라는 신조를 따릅니다.
오픈소스 컴포넌트는 NuGet에서 누적 <!--nuget-total:start-->6.48M<!--nuget-total:end-->회 다운로드되었습니다(생태계 전체 기준, 2026-10).
웹사이트: https://newlifex.com · 오픈소스 조직: https://github.com/NewLifeX
<details>
<summary>위챗 공식 계정: 智能大石头(스캔하여 팔로우)</summary>

</details>
---
## 라이선스
MIT © NewLife. 상업적 사용과 2차 개발을 환영합니다.
|