收集关于写nodejs原理书籍的一些建议

很幸运,nodejs被创造出来,nodejs在js的基础上,使用v8提供的能力,极大地拓展、丰富了js的能力。尤其是网络和文件。这样我就不仅可以使用js,还可以使用网络、文件等功能。这是我逐渐转向nodejs方向的原因之一。也是我开始研究nodejs源码的原因之一。因为nodejs满足了我喜好和技术上的需求。

研究nodejs源码已经有一段时间,也了解到使用nodejs的同学也越来越多,并且很多同学对nodejs原理都比较感兴趣。但是目前还没有纯粹讲解nodejs底层原理的书。所以决定把之前的研究心得和文章整理一下。写一本关于nodejs原理的书,希望在nodejs方面做点小贡献。nodejs的代码非常多,这是一个非常大的工程。我不打算也不可能面面俱到。虽然我不能保证投入的时间,但是我会在业余时间里努力去做好这个事情。目前写了目录和一些内容。对nodejs感兴趣的同学,可以给我留言,你希望学习到的内容,或者讲解的方式等等。我不能保证但是会尽量综合大家的想法。下面是目前的目录。另外加了两个章节stream和模块加载原理。我会从源码的角度去讲解,包括js,c++,c,甚至操作系统内核。希望能让大家多了解一点nodejs,谢谢。

目录
第一章、nodejs组成和原理 7
1.1 nodejs简介 7
1.1.1 js引擎v8 8
1.1.2 libuv 8
1.1.3 其他第三方库 12
1.2 nodejs工作原理 13
1.2.1如何在v8新建一个自定义的功能? 13
1.2.2 nodejs是如何实现拓展的? 13
1.3 nodejs启动过程 13
1.2.1 注册c++模块 14
1.2.2 CreateMainEnvironment 16
1.2.3 StartMainThreadExecution 20
1.2.4 进入libuv事件循环 20
第二章、Libuv数据结构和nodejs的c++层通用逻辑 20
2.1 核心结构体uv_loop_s 20
2.1.1基类uv_handle_t 23
2.1.2 uv_handle_t族结构体之uv_stream_s 23
2.1.3 uv_handle_t族结构体之uv_tcp_s 24
2.1.4 uv_handle_t族结构体之uv_udp_s 25
2.1.5 uv_handle_t族结构体之uv_tty_s 25
2.1.6 uv_handle_t族结构体之uv_pipe_s 25
2.1.2 uv_handle_t族结构体之uv_poll_s 26
2.1.7 uv_handle_t族结构体之uv_prepare_s、uv_check_s、uv_idle_s 26
2.1.8 uv_handle_t族结构体之uv_timer_s 26
2.1.9 uv_handle_t族结构体之uv_process_s 26
2.1.10 uv_handle_t族结构体之uv_fs_event_s 27
2.1.11 uv_handle_t族结构体之uv_fs_poll_s 27
2.1.12 uv_handle_t族结构体之uv_signal_s 28
2.1.13 uv_handle_t族结构体之uv_async_s 29
2.1.14基类uv_req_s 29
2.1.15 uv_req_s族结构体之uv_shutdown_s 29
2.1.16 uv_req_s族结构体之uv_write_s 30
2.1.17 uv_req_s族结构体之uv_connect_s 30
2.1.18 uv_req_s族结构体之uv_udp_send_s 30
2.1.19 uv_req_s族结构体之uv_getaddrinfo_s 31
2.1.20 uv_req_s族结构体之uv_getnameinfo_s 31
2.1.21 uv_req_s族结构体之uv_work_s 32
2.1.22 uv_req_s族结构体之uv_fs_s 32
2.2 queue 34
2.3.1 QUEUE_NEXT 35
2.3.2 QUEUE_PREV 37
2.3.3 QUEUE_PREV_NEXT、QUEUE_NEXT_PREV 37
2.3.4 删除节点QUEUE_REMOVE 37
2.3.5 插入队列QUEUE_INSERT_TAIL 38
2.3 io观察者 39
2.4 通用逻辑 42
2.4.1 c++层的通用逻辑 42
2.4.2 js调用c++ 46
2.4.3 Libuv通用逻辑 56
第三章 libuv流 58
3.1.1 初始化流 60
3.1.2 打开流 60
3.1.3 读流 61
12.1.3 写流 64
12.1.4 关闭流的写端 69
12.1.5 关闭流 70
12.1.6 连接流 71
12.1.7 监听流 74
3.1.7 销毁流 80
3.1.8 io事件触发时的处理 83
第三章、事件循环 84
3.2 事件循环 84
3.2.1 事件循环之close 86
3.2.2 事件循环之poll io 89
3.2.3 事件循环之定时器 94
3.2.4 事件循环之prepare,check,idle 99
第四章 主进程和子进程/线程的通信 103
第五章 线程池 108
5.1 线程池的初始化 108
5.2 提交任务到线程池 109
5.3 处理任务 112
5.4 子线程和主线程通信 114
第六章 dns 115
6.1 通过域名找ip 116
6.2 cares 119
6.2.1 Cares使用和原理 119
6.2.2 cares_wrap.cc的通用逻辑 119
6.2.3 cares_wrap.cc基类QueryWrap 120
第七章 unix域 122
7.1 unix域在操作系统的实现 122
7.1.1 unix域数据结构 122
7.1.2 unix域的实现 124
7.2 unix域在libuv中的使用 132
7.2.1 数据结构 132
7.2.2 初始化 133
7.2.3 绑定unix域路径 134
7.2.4 启动服务 134
7.2.5 连接 135
7.2.6 使用 136
7.3 unix域在nodejs中的使用 139
7.3.1 Pipe类 139
7.3.2 PipeConnectWrap类 140
7.3.3 常量 140
7.3.4作为客户端使用 140
第八章 文件 145
8.1 文件的概念 146
8.1.1 超级块 146
8.1.2.inode节点 147
8.1.3.file结构体 148
8.1.4 文件描述符 148
8.1.5 文件缓存系统 149
8.1.6 目录 149
8.2 文件系统的结构 150
内存中的结构 150
8.3操作文件 151
8.3.1 打开文件 151
8.3.2 文件读写 151
8.1同步api 152
8.2 异步api 155
8.3 文件监听 158
8.3.1 基于轮询的文件监听机制 159
8.3.2基于inotify的文件监听机制 162
第九章 信号处理 166
9.1 信号处理的初始化 166
9.2 信号结构体的初始化 168
9.3 信号处理的注册 170
9.4 信号的处理 172
第十章 定时器 175
10.1 核心数据结构 175
10.1.1 TimersList 175
10.1.2 优先队列 176
10.2 设置定时器处理函数 176
10.3设置定时器 176
10.4 处理定时器 178
10.5 libuv的实现 180
10.5.1 libuv中维护定时器的数据结构 181
10.5.2 比较函数 181
10.5.3 初始化定时器结构体 181
10.5.4 插入一个定时器 182
10.5.5 停止一个定时器 182
10.5.6 重新设置定时器 182
10.5.7 计算二叉堆中超时时间最小值 183
10.5.7 处理定时器 183
第十一章 setImmediate和process.nextTick 184
11.1 setImmediate生产任务 184
11.2设置处理immediate任务的函数 186
11.3注册check阶段的回调 187
11.4 理setImmediate产生的任务 187
11.5 初始化nextTick 188
11.6 nextTick生产任务 189
11.7 处理tick任务 190
第十三章 进程 191
第十四章 多线程 199
14.1 使用多线程 200
14.2 多线程的实现 201
14.3 线程间通信 207
14.4 如果更好地使用线程 208
14.4.1 如何判断创建线程是否成功 208
14.4.2 如何控制线程的数量 211
14.4.3 线程池 212
第十五章 拓展nodejs 221
15.1 修改nodejs内核 221
15.2 使用napi编写c++插件 224
十七章net模块 229
17.1 tcp客户端 230
17.1.1 建立连接 230
17.1.2 读操作 237
17.1.3 写操作 240
17.2 tcp 服务器 241
第十八章 http模块 248
第十九章 stream 248
19.1 流基类 248
19.2 可读流 250
19.3 可写流 254
19.4 双向流 260
19.4.1 销毁 260
第二十章 模块加载 261
五、参考资料 261
六、资源 261

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值