• 关于Nodejs 技术架构 如何与C++通信


    关于Nodejs

    版本:Nodejs单数是非稳定版本,双数是稳定版本

    Nodejs是什么

    先谈谈Nodejs不是什么

    • 不是Web框架,Nodejs并不是web后端框架,所以不能和Spring或flask对比
    • 不是编程语言,所以不能和Python和php对比

    Nodejs是一个平台

    • 将多种技术组合起来
    • 让JavaScript也能调用系统接口、开发后端应用

    Nodejs用了哪些技术

    • V8
    • libuv
    • C/C++实现的c-areas、http-parser、OpenSSL、zlib

    Nodejs技术架构

    - Nodejs Api 如http模块、fs、stream模块等
        - Nodejs bindings(让js和 C/C++通信)
            - V8 js引擎
            - libuv 跨平台的异步IO能力
            - DNS解析 c-areas
            - 加解密 OpenSSL 
            - 其他 http_parser、zlib等
        - C/C++ 插件(自定义其他能力,你可以自己写C/C++插件)
    

    Nodejs与C++通信

    Nodejs bindings
    Nodejs bindings能将cpp文件编译成node文件,js require可以调用require文件
    编译成node文件不是必须的,也可以是其他任何可行方式
    如对http-parser的封装就是http_parser_bindings.cpp

    libuv

    背景
    每个系统的异步io都不一样
    Linux有epoll
    windows有IOCP
    Ryan为了实现一个跨平台的异步IO库,开始写libuv

    libuv会根据系统自动选择合适的方案

    功能
    可以用于TCP/UDP/DNS/文件等异步操作

    IO即输入和输出,所有系统和外界的交互行为都叫做IO操作

    v8

    功能

    • 编译js文件
    • 维护函数调用栈
    • 内存管理,为对象分配内存
    • 垃圾回收
    • 实现js的标准库

    注意

    • V8不提供DOM API
    • V8执行js是单线程的
    • 可以开启两个线程分别执行js, 但V8本身是包含多个线程的,比如垃圾回收是单独的线程,只不过js执行是单线程的
    • 自带EventLoop但是Nodejs基于libuv自己做了一个

    EventLoop

    ->1. timers
    ->2. I/O callbacks
    ->3. idle,prepare
    ->4. poll
    ->5. check 
    ->6. close callbacks
    ->1. timers
    

    大部分时间停留在poll阶段
    check主要用于检查setImmediate回调
    timers主要检查setTimeout回调

    所以setTimeout(cb,0)和setImmediate(cb)谁先执行?
    一般般来说是第二个先执行,因为一般在poll阶段,从poll出来的时候,先到check,再到timers
    但是也有例外,如果是第一次,那么先检查timers, 也就是第一个先执行

    Nodejs技术架构总结

    • libuv支持异步I/0操作
    • 用EventLoop管理事件处理顺序
    • 用C/C++库高效处理DNS/HTTP
    • 用bindings沟通js和C++
    • 用V8运行js
  • 相关阅读:
    linux网络管理之netstat命令
    linuxping命令
    linux网络管理-ip
    linux网络管理--网络配置及命令
    汇编基础整理
    windows编辑文本和unix编辑文本的回车符问题
    Zend Studio 8.0.1 新建远程项目无法展示远程项目列表的问题
    HTTPS 服务器搭建
    mysql中的JOIN用法总结
    tcpdump使用和TCP/IP包分析
  • 原文地址:https://www.cnblogs.com/ltfxy/p/15848811.html
Copyright © 2020-2023  润新知