Node.js 是什么

  • 是一个平台
    1.他将多种技术组合在一起
    2.让JavaScript也能调用系统接口、开发后端应用

  • Node.js 用到了那些技术
    1.V8引擎
    2.libuv
    3.C/C++实现的 c-ares(解析dns)、http-parser(解析http)、OpenSSL(来做https)、zlib(来做加密)等库

技术架构

如果要看源码,推荐看0.10版本

  • 什么是bindings
    1.js不能直接对系统进行操作
    2.node.js 用 C++ 进行封装,封装的文件叫做 xxx_bindings.cpp
    3.在用node.js提供的编译工具将其编译成 .node 文件
    4.这样js就能直接 require 这个文件,
    5.中间的桥梁就叫做binding,因为很多桥梁,所以就叫bindings

JS 调用C++代码 http://nodejs.cn/api/addons.html#addons_function_arguments
C++ 调用JS 回调 http://nodejs.cn/api/addons.html#addons_callbacks

Node.js 的工作流程

libuv 是什么

  • 背景
    1.FreeBSD系统上面有kqueue
    2.Linux系统上有epoll
    3.windows系统上有IOCP
    4.于是Ryan 就写了一个跨平台的异步 I/O库–libuv
    5.libuv会根据系统自动选择合适的方案
  • 功能
    可以用于 TCP/UDP/DNS/文件等的异步操作

V8

- 功能

  1. 将 JS 源代码变成本地代码并执行
  2. 维护调用栈,确保 JS 函数的执行顺序
  3. 内存管理,为所有对象分配内存
  4. 垃圾回收,重复利用无用的内存
  5. 实现 JS 的标准库

- 注意

  1. V8 不提供DOM API
  2. V8 执行 JS 是单线程的
  3. 可以开启两个线程分别执行 JS
  4. V8 本身是包含多个线程的,如垃圾回收为单独线程
  5. 自带 event loop 但 Node.js 基于 libuv自己做了一个

API