网络框架真正重复的部分
建立连接只是开始。消息编号、序列化、分发、请求响应配对、超时、心跳、网关转发和错误处理,才是业务不断重复编写的部分。
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 与线协议可能变化。生产使用前应完成自己的压力测试、异常注入和跨版本兼容验证。
