← 微风游乐园
← 全部作品 DOC.12 — REV.2026

UNIFIED ASYNC NETWORKING

breconn

基于 Asio、以 Channel 统一接口的多传输与服务发现网络库

2 万+ LINES OF
NETWORKING CORE
ARCHITECTURE NOTE / 001

breconn 是一套目前约 2 万行代码、基于 Asio 的网络库。上层只使用简洁、统一的 Channel 接口,不需要直接处理不同传输协议的连接、收发与生命周期差异;底层目前提供 TCP、UDP、KCP,以及 UDP 组播与广播能力,QUIC 作为后续传输能力规划。协议层已经覆盖 HTTP 与 WebSocket,mDNS 被拆成解耦的服务发现模块,并通过插件机制为 RTP 等新协议保留动态扩展入口。

FIGURE 01

One channel.
Many transports.

所有后端向同一个稳定边界汇聚;协议再从边界之上生长。

breconn 网络库架构图,以统一 Channel 连接 TCP、UDP、KCP 等传输实现,并在上层挂载 HTTP、WebSocket、mDNS 服务与可扩展协议插件
REFERENCE ARCHITECTURE / ASIO / CHANNEL / TRANSPORT / PROTOCOL PLUGINS
N01 Asio Runtime

统一管理异步 I/O、任务调度、超时与连接生命周期

N02 Channel API

向上层提供一致的连接、收发、关闭、错误与状态事件接口

N03 Transport Backends

承载 TCP、UDP 与 KCP 实现,并为后续 QUIC 后端保留扩展边界

N04 Multicast / Broadcast

提供组播组管理、网卡选择与局域网广播收发能力

N05 mDNS Service

将服务发现与公告解耦为独立模块,通过 Channel 接入而不依赖具体业务

N06 HTTP / WebSocket

在 Channel 之上完成协议解析、封装、升级与会话处理

N07 Protocol Plugins

通过注册和装配机制动态接入 RTP 等新增协议模块

CHANNEL API
PROBLEM / A

协议差异,不应该泄漏到业务。

TCP、UDP 与 KCP 在连接语义、可靠性、消息边界和生命周期上差异明显,如果业务直接依赖各自的 Socket API,每增加一种传输方式都会把分支扩散到上层。组播、广播与 mDNS 又同时涉及网卡选择、地址管理和服务发现状态;如果与 UDP 或业务代码强绑定,协议层和发现服务便无法独立测试、替换与复用。

DECISION / B

把变化隔离在 Channel 的另一侧。

以 Asio 承担异步 I/O 与事件循环,在传输实现之上建立统一 Channel 抽象,把打开、关闭、读写、错误和状态变化收敛为稳定接口。UDP 后端提供组播组管理与广播收发,mDNS 则作为独立服务使用标准 Channel 能力完成发现与公告。HTTP 与 WebSocket 作为协议层运行在 Channel 之上,并通过协议插件注册与装配机制扩展新的解析、封装和会话逻辑。

CAPABILITY MATRIX

网络能力与实现边界

能力与边界
01

基于 Asio 组织异步 I/O、连接生命周期与事件调度

项目能力
02

上层统一使用 Channel 接口,隐藏不同传输实现的操作差异

项目能力
03

当前提供 TCP、UDP 与 KCP 传输能力

项目能力
04

支持 UDP 组播组加入、离开以及局域网广播收发

项目能力
05

mDNS 以解耦服务提供设备发现与服务公告,不绑定具体业务模块

项目能力
06

QUIC 已纳入后续规划,当前尚未实现

规划中
07

协议层支持 HTTP 与 WebSocket,并与底层传输解耦

项目能力
08

协议插件机制允许后续动态增加 RTP 等协议能力

项目能力

后续演进 · 以下为路线图,具体阶段以项目说明为准。

EVOLUTION MAP

接口保持稳定,
能力继续向外扩张。

R1

CURRENT

稳定统一接口与现有网络能力

  • Asio 异步运行时
  • Channel 统一接口
  • TCP / UDP / KCP
  • UDP 组播与广播
  • 解耦 mDNS 服务
  • HTTP / WebSocket
  • 协议层插件机制
R2

NEXT

扩展传输后端与实时媒体协议

  • 实现并接入 QUIC
  • 增加 RTP 等协议插件
  • 完善插件发现与动态装配
  • 补充跨协议测试与性能基准
ARCHITECTURAL INVARIANTS

任何新协议都不能破坏这些约束

  1. 01

    业务依赖 Channel,而不是依赖某一种 Socket 或传输协议。

    LOCKED
  2. 02

    传输层解决数据如何到达,协议层解决数据如何解释,两者保持可独立扩展。

    LOCKED
  3. 03

    新增后端或协议不应迫使已有上层业务修改调用方式。

    LOCKED
  4. 04

    尚未实现的能力必须明确标记为规划项,避免把路线图写成现成功能。

    LOCKED