✦

烜的小屋

烜的小屋
✦首页⌘项目◷归档♫音乐☁杂谈♡关于
封面

LuminNet:从传输层到强类型 RPC 的高性能网络框架

写作时间:2026-07-18 19:45:00
# C#
# 网络
# RPC
# KCP
◉0 次浏览

网络框架真正重复的部分

建立连接只是开始。消息编号、序列化、分发、请求响应配对、超时、心跳、网关转发和错误处理,才是业务不断重复编写的部分。

LuminNet 将这些能力组织为一个面向 .NET 的高性能网络与 RPC 框架,并使用 Roslyn 增量源生成器生成消息分发与强类型调用代码,减少运行时反射和重复分配。

传输与框架能力

  • TCP、WebSocket 与 KCP 三种传输。
  • 单向消息、请求 / 响应 RPC,以及 Gate 网关转发。
  • 连接生命周期事件、心跳检测和 RPC 超时控制。
  • 最大帧长度、转发 Key 长度与 KCP 会话数限制。
  • 支持 .NET 8/9/10 与 .NET Standard 2.1。

定义协议

消息使用 LuminPack 序列化,通过属性描述消息和 RPC 关系:

using LuminNet.Attribute;
using LuminPack.Attribute;

[LuminPackable]
[LuminNetMessage]
[LuminNetRpc(typeof(Pong))]
public class Ping
{
    public int Id;
}

[LuminPackable]
public class Pong
{
    public int Id;
}

服务端处理器同样通过属性与协议绑定:

[LuminProtocol(typeof(Ping), typeof(Pong))]
public static async LuminTask Handle(
    Session session, Ping request, Pong response)
{
    response.Id = request.Id + 1;
    await LuminTask.CompletedTask();
}

生成器会为消息生成类似 SendPing 与 SendPingForPong 的扩展方法,让调用端保持强类型:

var session = await LuminNetwork.ConnectAsync(
    NetworkProtocol.Tcp, "127.0.0.1", 9000);

await session.SendPing(new Ping { Id = 42 });
var response = await session.SendPingForPong(new Ping { Id = 42 });

Lumin 生态的组合

LuminNet 的序列化由 LuminPack 提供,异步抽象来自 LuminTask,底层还组合了 LuminDelegate、LuminObjectPool 与 LuminKcp。这让每个仓库保持明确职责,同时能够在网络热路径中复用一致的性能策略。

项目仍在持续开发,API 与线协议可能变化。生产使用前应完成自己的压力测试、异常注入和跨版本兼容验证。

项目源码:TheLight-233/LuminNet

💬

评论区准备中

已移除模板中存在安全风险的旧 Gitalk 依赖。新的 GitHub Discussions 评论系统接入前,可以通过邮箱与我交流。

发送邮件
avatar

Light

专注高性能 C#、.NET Runtime、Unity 与网络基础设施,把对性能的执着写进每一行代码。

RECOMMENDED

LuminCLR:用 C++17 探索 .NET Runtime 与 AOT

2026-07-24 22:00:00

LuminPack:为 C# 与 Unity 打造的高性能序列化

2026-08-01 21:30:00

LuminTask:低分配 async/await 的一次系统化实践

2026-07-29 20:10:00

Table of Contents