电子说
最近发现一个不错的开源项目:只有1300行代码、适合初学者的、超轻量级C语言网络库——Dyad。
dyad 是什么?
Dyad 是一个基于 C 语言的异步网络库,旨在轻量级、可移植和易用。它既可用于创建小型独立服务器,也可用于为现有的项目提供网络支持。
Github 链接:
代码更少,整个项目就一个 .c 文件和一个 .h 文件,加起来代码一共 1300 行。
功能更纯粹,仅支持 TCP 协议。
代码优雅,API 简洁易使用,非常适合初学者用来学习 Linux 网络编程和了解异步处理的本质。
dyad 怎么用?
用 dyad 写一个 echo server:
echo server 的作用就是客户端给它发送什么,它就回复什么。例如我说 “Hi”,echo server 就会回复 "Hi",代码的主流程如下:
dyad 怎么实现?
作为一个爱学习好孩子,dyad 的代码绝对值你好好品读。 要理解 dyad 的内部实现,首先是要理解其数据结构的设计。
dyad 最重要的概念是 Stream,一个 Stream 可以对应多个 Listener,每一个 Listener 负责监听一种 Event ,当 Event 发生时,调用相应的 Callback 函数。
Stream 是怎么设计的?
分为 2 部分,其中一部分是 socket 相关的成员,另一部分是数据相关的成员。所有 Stream 都挂在一个链表下。当进入 eventloop 时,会遍历所有的 Stream,处理每一个 Streame 的 Event。
检测有无 Event 的 dyad_update() 是在干嘛?
本质就是用 select() 检测所有的 Stream 里的 socket 描述符。 当有 Event 发生时,根据事件类型,将事件分发给 Stream 上的等待相应 Event 的 Listener,本质就是调用 Listener 绑定的回调函数。
总结
dyad 是一个超级轻量级的 C 语言异步网络库。 它功能纯粹,API 简洁易使用,对于使用者而言,简直就是开箱即用,前提是你需要的一个简单小巧的 TCP Server。 另外,其内部的代码实现优雅且巧妙,非常适合初学者用来学习 Linux 网络编程和了解异步处理的本质。 如果你需要的是高性能的服务器,那么应该考虑 libuv。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !