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

    文章

    7591

    浏览量

    135770
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1346

    浏览量

    78909
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21601

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    C语言初学者入门讲座

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

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

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

    适合初学者的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

    C语言初学者入门讲座

    C语言初学者入门讲座:面向对象编程和可视化集成开发工具的发展,使很多曾经非常流行的编程语言影响下降甚至逐步消失,但有
    发表于 10-24 13:38 106次下载

    编程及C C++初学者+FAQ

    编程及C C++初学者+FAQ
    发表于 09-06 14:55 80次下载

    非常适合C语言初学者宝典[C和指针(第二版)].(美)扫描版

    电子发烧友网站提供《非常适合C语言初学者宝典[C和指针(第二版)].(美)扫描版.txt》资料免费下载
    发表于 08-11 10:46 0次下载

    电子初学者电路图如何看

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

    verilog_经验(适合初学者)

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

    初学者边用边学C语言

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

    fpga开发板推荐初学者

    对于初学者来说,选择一款适合学习的FPGA是整个FPGA学习生涯的必经之路。我个人建议在选择FPGA的时候,应该抓住如下几个原则:
    的头像 发表于 11-10 14:55 1.9w次阅读

    FPGA初学者必读文档

    FPGA初学者必读文档(嵌入式开发适合哪个城市)-FPGA初学者必读文档,为学习FPGA做好准备。
    发表于 08-04 11:39 32次下载
    FPGA<b class='flag-5'>初学者</b>必读文档

    初学者如何入门C语言

    原文链接:公众号:Allen有话说之前发了初学者首先应该的学的编程语言,我的建议是C语言,然后有个朋友就私信我说
    发表于 12-31 19:46 4次下载
    <b class='flag-5'>初学者</b>如何入门<b class='flag-5'>C</b><b class='flag-5'>语言</b>

    适合初学者的螺旋称重喂料机

    电子发烧友网站提供《适合初学者的螺旋称重喂料机.zip》资料免费下载
    发表于 11-14 10:04 5次下载
    <b class='flag-5'>适合</b><b class='flag-5'>初学者</b>的螺旋称重喂料机