适合新手的C语言开源项目?

发布时间:
2023-11-20 00:50
阅读:
4

Redis 创始人 antirez 用纯 C 语言代码写了一个聊天服务器的最小编程示例:Smallchat。


Smallchat 的核心代码仅 300 多行。antirez 称删除空行和注释后其实只有 200 多行。

Smallchat 源代码已托管至 GitHub:https://github.com/antirez/smal

antirez 表示,编写这个示例是为了帮助他的前端开发朋友了解系统编程知识,比如单个进程执行多路复用、获取客户端状态,并在客户端拥有新数据后尝试快速访问此类状态,等等。

整个代码结构如下:

  • 基础数据结构

全局变量 struct chatState *Chat用来存储所有的状态信息;

struct client *clients[MAX_CLIENTS]数组,用来存储所有客户端的fd以及用户昵称


  • 代码流程

1.initChat初始化全局变量,同时创建服务端监听fd保存到全局变量Chat->serversock中 2.开始while死循环 3.先初始化fd_set集合 4.将监听fd和客户端fd放入到fd_set集合中 5.调用系统函数select对fd_set集合进行事件监测,同时将监测到结果保存到fd_set中 6.最后在分别对监听fd和客户端fd在结果fd_set中是否有事件进行判断 7.分别进行对应的业务处理


代码结构很清晰,很适合初学C语言的同学拿来练手网络编程。后续代码还会增加对称加密/更高级的网络模型等等,可以持续关注学习。整个的网络IO的处理和Redis源码关于网络IO的处理有很多相似之处。

END