在正式开始阅读代码之前,先来看一下代码整体结构
代码规模不大只有1w多行,而且功能划分的比较清晰,包括:
- 事件处理: event/nc_epoll.c、event/nc_event.h、event/nc_evport.c、event/nc_kqueue.c
- 各种Hash函数: hashkit/nc_crc16.c、hashkit/nc_crc32.c、hashkit/nc_fnv.c、hashkit /nc_hashkit.h、hashkit/nc_hsieh.c、hashkit/nc_jenkins.c、hashkit /nc_ketama.c、hashkit/nc_md5.c、hashkit/nc_modula.c、hashkit/nc_murmur.c、 -hashkit/nc_one_at_a_time.c、hashkit/nc_random.c
- 协议: proto/nc_memcache.c、proto/nc_proto.h、proto/nc_redis.c
- 自定义的数据类型: nc_array.c、nc_array.h、nc_string.c、nc_string.h
- 网络通信相关: nc_connection.c、nc_connection.h、nc_client.c、nc_client.h、nc_proxy.c、nc_proxy.h
- 信号处理: nc_signal.c、nc_signal.h
- 关键数据结构和算法: nc_rbtree.h、nc_rbtree.c、nc_queue.h、nc_request.c、nc_response.c、nc_mbuf.c、 nc_mbuf.h、- nc_message.c、nc_message.h、nc_server.c、nc_server.h
- 统计、日志和工具: nc_stats.c、nc_stats.h、nc_log.c、nc_log.h、nc_util.c、nc_util.h
- 配置文件: nc_conf.c、nc_conf.h
- 主程序: nc.c、nc_core.c、nc_core.h
src/nc.c文件 是程序入口main函数所在,下面我给各个函数加了注释
int
main(int argc, char **argv)
{
rstatus_t status; //rstatus_t 返回类型
struct instance nci;//nc实例
nc_set_default_options(&nci); //为nc实例设置一些默认的参数属性值 之后具体介绍
status = nc_get_options(argc, argv, &nci)</