0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一款适合初学者超轻量级C语言网络库—Dyad

Q4MP_gh_c472c21 来源:老吴嵌入式 作者:吴伟东Jack 2022-10-10 14:33 次阅读

最近发现一个不错的开源项目:只有1300行代码、适合初学者的、超轻量级C语言网络库——Dyad

dyad 是什么?

Dyad 是一个基于 C 语言的异步网络库,旨在轻量级、可移植和易用。它既可用于创建小型独立服务器,也可用于为现有的项目提供网络支持。

Github 链接

pYYBAGNDvNaAAHdDAAAei30q9Qg353.jpg


之前介绍过另外一个轻量级异步网络库: 简单易用的嵌入式网络库 Mongoose。

和 Mongoose 对比,Dyad 的特点是

代码更少,整个项目就一个 .c 文件和一个 .h 文件,加起来代码一共 1300 行。

功能更纯粹,仅支持 TCP 协议。

代码优雅,API 简洁易使用,非常适合初学者用来学习 Linux 网络编程和了解异步处理的本质。

dyad 怎么用?

用 dyad 写一个 echo server:

echo server 的作用就是客户端给它发送什么,它就回复什么。例如我说 “Hi”,echo server 就会回复 "Hi",代码的主流程如下:


pYYBAGNDvPmANDvZAADDk4KFbks710.jpg

当有客户端连接上来时,就触发了 ACCEPT 事件,对应的处理函数 onAccept() 就会被调用。在 onAccept() 里我们将监听 DATA 事件。

poYBAGNDvQ6ABgeBAABBBp25qzA706.jpg

当客户端发数据过来时,就触发了 DATA 事件,对应的处理函数 onData() 就会被调用。在 onData() 进行写操作完成 echo 功能。

poYBAGNDvSOANftKAAA2h8wYpZ8102.jpg

简单到不用 Makefile 就可以编译:

pYYBAGNDvUqAff6DAAAmvRp2TTY392.jpg

telnet 测试一下:

poYBAGNDvXeAE9uAAABSLxGK-14578.jpg

telnet 发送 "Hello World!" 后,能成功接收到 eco server 返回的 "Hello World!"。

API 简介:

虽然 dyad 的 API 大概有 20 来个:

afec2b24-485a-11ed-a3b6-dac502259ad0.png

但是,最常用的 API 就下面 5 个:

pYYBAGNDvZaAVP-mAAA9guH0saQ633.jpg

如果你不关心 dyad 的内部实现,只要熟悉 dyad 这几个 API, 就可以将 Linux 下的 TCP 网络通讯玩得很溜了。

dyad 怎么实现?

作为一个爱学习好孩子,dyad 的代码绝对值你好好品读。 要理解 dyad 的内部实现,首先是要理解其数据结构的设计。 b00e1608-485a-11ed-a3b6-dac502259ad0.png

dyad 最重要的概念是 Stream,一个 Stream 可以对应多个 Listener,每一个 Listener 负责监听一种 Event ,当 Event 发生时,调用相应的 Callback 函数。

Stream 是怎么设计的?

b03f2a90-485a-11ed-a3b6-dac502259ad0.png

分为 2 部分,其中一部分是 socket 相关的成员,另一部分是数据相关的成员。所有 Stream 都挂在一个链表下。当进入 eventloop 时,会遍历所有的 Stream,处理每一个 Streame 的 Event。

检测有无 Event 的 dyad_update() 是在干嘛?

本质就是用 select() 检测所有的 Stream 里的 socket 描述符。 当有 Event 发生时,根据事件类型,将事件分发给 Stream 上的等待相应 Event 的 Listener,本质就是调用 Listener 绑定的回调函数。

b0480700-485a-11ed-a3b6-dac502259ad0.png

总结

dyad 是一个超级轻量级的 C 语言异步网络库。 它功能纯粹,API 简洁易使用,对于使用者而言,简直就是开箱即用,前提是你需要的一个简单小巧的 TCP Server。 另外,其内部的代码实现优雅且巧妙,非常适合初学者用来学习 Linux 网络编程和了解异步处理的本质。 如果你需要的是高性能的服务器,那么应该考虑 libuv。 b05467e8-485a-11ed-a3b6-dac502259ad0.png




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128766
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1272

    浏览量

    78299
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21389

原文标题:一款只有1300行代码的轻量级C语言网络库

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求推荐一款适合初学者学习的单片机学习/开发版,及配套的

    本人通信工程专业本科毕业两年了,当初学的单片机及汇编/C语言块的理论知识也已经忘得差不多了(平时工作中没能用到),现在想从头学习51单片机。 希望大家推荐
    发表于 04-17 18:14

    C语言学习资料汇总,非常适合初学者的入门资料!

    C语言学习资料汇总,非常适合初学者的入门资料!《高质量程序设计指南.C++/C
    发表于 07-26 13:12

    ARM9和STM32哪个更适合初学者

    ARM9和STM32哪个更适合初学者?请各位推荐种,最好能推荐一款好的开发板。这两个哪个更有市场?
    发表于 11-16 17:32

    C语言初学者入门讲座

    C语言初学者入门讲座
    发表于 04-20 12:59

    适合初学者的教材

    适合初学者的教材里面有些实例
    发表于 05-27 20:43

    初学dsp,想问下哪dsp的开发版适合初学者

    大家好,本人初学dsp,想问下哪dsp的开发版适合初学者
    发表于 08-10 16:48

    适合嵌入式初学者C语言视频教程,收藏了!

    了解过嵌入式的朋友们都知道,学习C语言是嵌入式的基础,也是非常重要的部分,今天在这里给大家分享适合嵌入式
    发表于 05-03 14:31

    适合初学者的51单片机C语言编程入门PDF下载

    个pdf格式的电子书,共享给网友们,很适合初学者学习的哦,下面是电子书的目录 51单片机C语言编程入门(中科大).pdf
    发表于 07-19 01:40

    超轻量级的flashKV数据存储方案分享

    tinyFlash超轻量级的flash KV数据存储方案Github 地址:https://github.com/ospanic/tinyFlash设计原理本方案采用两个扇区轮流使用的方法存储
    发表于 12-20 06:08

    电子初学者电路图如何看

    电子初学者的指南,介绍了好些东西,都是最基础的。适合初学者
    发表于 11-23 12:05 0次下载

    verilog_经验(适合初学者)

    verilog_经验(适合初学者),感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-10 17:12 29次下载

    电子学习资料[适初学者]

    适合初学者的学习资料
    发表于 02-08 17:25 0次下载

    初学者边用边学C语言

    初学者边用边学C语言
    发表于 09-22 10:14 16次下载
    <b class='flag-5'>初学者</b>边用边学C<b class='flag-5'>语言</b>

    R语言初学者指南 pdf下载

    R初学者指南
    发表于 02-26 09:35 13次下载

    适合树莓派初学者的10个项目

    下面小编就为初学者筛选了10个适合的树莓派开发项目,这10个项目能够很好地帮助初学者对树莓派的硬件和软件有更清晰的认识和理解。话不多说,开始行动吧!
    发表于 05-10 10:28 4.7w次阅读