2 分•作者: enduku•3 个月前
我编写了 vibe,一个用于在 Linux 上通过帧式 TCP 和 Unix 域套接字进行消息传递的小型单头 C 库:
[https://github.com/xtellect/vibe](https://github.com/xtellect/vibe)
它使用一个后台 epoll 线程。应用程序代码轮询一个收件箱队列,以获取 CONNECTED、DATA 和 DISCONNECTED 事件,并通过每个连接的发件箱发送数据。
我想要的功能:
- TCP 或 Unix 流套接字
- 4 字节长度前缀的消息
- 应用程序端非阻塞轮询
- 通过引用计数有效载荷块进行单拷贝扇出
- 明确的每个连接背压,而不是无界队列
对于多播,有效载荷被复制一次到引用计数块中,然后通过引用排队到每个接收者。一个 1 KB 的消息发送给 1,000 个对等方,只需一次有效载荷分配/复制,加上 1,000 个队列节点,而不是 1,000 次有效载荷复制。
目前仅限 Linux:epoll、eventfd、accept4 和 Linux 抽象 Unix 套接字。没有 UDP、TLS、HTTP 或 WebSocket 层。
这并非旨在成为一个完整的网络框架。我发布它主要是为了征求您的意见/审查,特别是关于连接生命周期、背压计算、边缘情况和队列设计。
Apache 2.0 许可。