美文网首页
1-node概念

1-node概念

作者: 梦想成为小仙女 | 来源:发表于2019-03-02 11:35 被阅读17次

    这里我们要理解概念和安装方法,其中会出现许多生僻的概念,阻碍我们理解,会在引用里单独说明
    https://nodejs.org/en/

    0.重点

    1.Node在企业开发中的应用
    作为中间件,用于大并发相关处理,缓存
    原始弊端:服务器最大访问量受限
    中间件:通过中间件访问服务端,减少服务端压力
    2..msi直接安装的包文件
    3.安装路劲无中文
    4.Node.js安装
    4.1 官网下载
    4.2 全程下一步
    4.3 node -v

    一.什么是Node.js

    • Node.js是一个基于chrome V8引擎的JS运行环境
    • Node.js使用事件驱动,非阻塞式I/O模型,使其轻量又高效
    • Node.js平台使用的开发语言是JS,平台提供了操作系统底层的API,方便做服务端编程,具体包括:文件操作,进程操作,通信操作等系统模块
    • 用JS语言开发运行在Node.js运行环境上的程序

    运行环境:Windows,Linux,MacOS,微信(小程序)都是运行环境
    node.js不是计算机语言,是运行环境,简单的说,就是用JS开发的可以运行JS应用程序的平台

    二.什么是V8引擎

    • V8引擎是专门对JS语言进行解释和执行的流程虚拟机
    • 就像要运行JAVA开发的应用软件要按张java虚拟机,要运行js开发的软件也要运行js虚拟机,这个虚拟机就是V8引擎,它是独立于外界的js应用软件运行环境
    • 把V8引擎嵌入到浏览器中,那么我们写的JS代码就会被浏览器执行
    • 把V8引擎嵌入到NodeJS运行环境下,我们写的JS代码就会被服务器所执行

    简单的说nodejs是一种让js做服务端开发的运行环境

    • V8引擎嵌入到不同的宿主环境中时,可以把JS语言应用到不同的多个邻域

    虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
    虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels DesktopVmwareVirtualBoxVirtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。
    流行的虚拟机软件VMware(VMWare ACE)、Virtual BoxVirtual PC,它们都能在Windows系统上虚拟出多个计算机。
    --------百度百科

    简单的说V8引擎就是一种能够运行JS应用程序的虚拟机,虚拟机就是软件搭建出来的,隔离于外界的运行环境

    三.Node.js特点

    • 单线程

    • 非阻塞I/O

      • 传统单线程:当在访问数据库取得数据的时候,需要一段时间等待数据库返回数据.在传统的单线程处理机制中,在执行访问数据库代码之后,整个线程都将停下来,等待数据库返回结果才能执行后面的代码.也就是说,I/O阻塞了代码的执行,极大的降低了程序的执行效率.
      • Node单线程:node.js中采用了非阻塞性I/O机制,因此在执行了访问DB的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,等得到访问结果触发回调函数,线程再执行回调函数中的指令.从而提高了程序的执行效率
    • 事件驱动

      • 当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数.为了处理异步I/O,线程必须有事件循环,不断检查有没有未处理的事件,依次予以处理
      • 在Node中,一个时间点只能执行一个事件回调函数,但是在执行一个事件回调函数的中途可以转而处理其他事件,然后返回继续执行事件的回到函数,这种处理机制称为"事件环"机制
    image.png

    多线程推理:这样的话多线程,就是多个事件环同时处理多个程序,多线程非阻塞,就是一个线程中的事件需要等待I/O接收返回的信号,线程会接着执行队列中的下一个事件,知道I/O收到返回的信号,会告诉线程执行该I/O操作触发的回调函数

    四.node.js单线程非阻塞的优势

    • 开启线程非常浪费资源,为了不浪费资源,所以node不开线程,假设开了线程,运行node.js就会有多个事件环,要浪费资源为每个线程分配事件,同时处理多个事件又会消耗CPU
    • 不开线程,就是单线程,单线程会阻塞(前面没有执行完毕后面不能执行),效率低下
    • node.js为了解决这个问题,采用了消息(事件)机制,前面的阻塞了,立刻去执行其它的,前面的回来了,再继续执行前面的
      这样做的好处时提升了处理效率,CPU随时随地都在做事情,不会闲着

    五.Node.js之父

    Ryan Dahl(瑞安 达尔)
    2009年推出Node.js,2012年提出Node.js转战Go语言

    六.Node.js应用场景

    • 网站开发(如express,koa等)

    Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
    使用 Express 可以快速地搭建一个完整功能的网站。
    Express 框架核心特性:
    可以设置中间件来响应 HTTP 请求。
    定义了路由表用于执行不同的 HTTP 请求动作。
    可以通过向模板传递参数来动态渲染 HTML 页面。
    http://www.runoob.com/nodejs/nodejs-express-framework.html

    Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
    https://koa.bootcss.com/

    • im即时聊天(socket.io)

    即时通信(IM,即 Instant Messaging)是指能够即时发送和接收互联网消息等的业务。1998年即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。
    即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。随着移动互联网的发展,互联网即时通信也在向移动化扩张。目前,微软、AOL、Yahoo等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收发消息。 [1]
    ------百度百科

    socket.io
    https://socket.io/
    https://www.w3cschool.cn/socket/socket-1olq2egc.html
    简单的说就是主流实时通讯引擎

    • api(移动端,PC,H5)

    api:
    http://baijiahao.baidu.com/s?id=1597881116201407882&wfr=spider&for=pc
    简单的说,就是将某一个功能封装起来的函数,或者是实现某一个服务
    .移动端就是移动端应用程序功能的实现,PC端就是客户端应用程序功能的实现,H5就是浏览器端应用程序功能的实现

    • HTTP Proxy(淘宝,Qunur,腾讯,百度都有)

    HTTP Proxy:
    代理客户机的http访问,主要代理浏览器访问网页,它的端口一般为80、8080、3128等。
    代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。
    代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
    更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的会话层。
    ---------百度百科
    简单的说,代理服务器,就是客户端与服务器之间用于缓存和安全校验的中转站,本质也是一台提供中转功能的服务器

    • 前端构建工具(grunt/gulp/bower/webpack/fis3...)

    grunt:
    https://www.gruntjs.net/
    一句话:自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。当你在 Gruntfile 文件正确配置好了任务,任务运行器就会自动帮你或你的小组完成大部分无聊的工作。
    Grunt 生态系统非常庞大,并且一直在增长。由于拥有数量庞大的插件可供选择,因此,你可以利用 Grunt 自动完成任何事,并且花费最少的代价。如果找不到你所需要的插件,那就自己动手创造一个 Grunt 插件,然后将其发布到 npm 上吧。先看看入门文档吧。
    你所需要的大多数task都已经作为Grunt插件被开发了出来,并且每天都有更多的插件诞生。插件列表页面列出了完整的清单。
    -----------官网
    简单的说就是基于配置文件(插件)完成自动打包压缩等需要重复执行的操作

    gulp
    https://www.gulpjs.com.cn/
    作用是:快速构建项目,减少频繁的I/O操作

    bower
    https://segmentfault.com/a/1190000002971135
    Bower是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt

    webpack
    https://www.webpackjs.com/
    简单的所就是基于根文件index.js搜索所有引用的包,利用loader打包成浏览器可执行的js文件

    fis3
    http://fis.baidu.com/
    FIS3 是面向前端的工程构建工具。解决前端工程中性能优化、资源加载(异步、同步、按需、预加载、依赖管理、合并、内嵌)、模块化开发、自动化工具、开发规范、代码部署等问题。

    • 跨平台打包工具
      PC端的electron,nw.js(钉钉PC客户端/微信小程序IDE/微信客户端)
      移动端的cordova,Phonegap
      一站式开发框架 ionic framework

    跨平台打包工具
    http://blog.talkingdata.com/?p=6149
    在如今的电子世界当中,运行着各类操作系统,如何让应用适配每个操作系统平台,是开发者们一直在思考的问题。因为平台、技术、工具的有多样性,让适配变得无比的困难与繁杂,甚至需要花费大量的时间和资金去进行研究。本文将介绍目前比较流行的可以开发跨平台应用的开发工具,希望能够帮助开发者们实现全平台覆盖。
    简答的说就是在一个平台上开发出的程序,能在各大平台应用

    electron
    http://electronjs.org/docs
    Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将ChromiumNode.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
    Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个项目在2014春季开源。
    目前它已成为开源开发者、初创企业和老牌公司常用的开发工具。 看看谁在使用Electron
    继续往下阅读可以了解Electron的贡献者们和已经发布的版本,或者直接阅读快速开始指引来开始用Electron来构建应用。
    --------官方文档
    简答的说就是将浏览器应用程序打包成客户端应用程序

    cordora http://www.dba.cn/book/cordova/CORDOVAJiaoCheng/CORDOVAGaiShu.html
    Cordova 是使用HTML,CSS和JavaScript构建混合移动应用程序的平台。官方文档给了我们Cordova的定义。
    Apache Cordova是一个开源移动开发框架,它允许您使用标准的Web技术,如HTML5,css3和JavaScript进行跨平台开发,避免每个移动平台本机开发语言。应用程序在针对每个平台的包装内执行,并依靠符合标准的API绑定来访问每个设备的传感器,数据和网络状态。"
    简单的说就是应用web端语言开发移动端应用

    shell.js
    https://blog.51cto.com/13869008/2173451
    Shell是linux下的脚本语言解析器,拥有丰富且强大的底层操作权限。Shelljs就是基于node的一层命令封装插件,让前端开发者可以不依赖linux也不依赖类似于cmder的转换工具,而是直接在我们最熟悉不过的javascript代码中编写shell命令实现功能。
    简答的说就是用JS代码实现shell的功能

    shell
    http://www.runoob.com/linux/linux-shell.html
    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
    Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
    Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
    简单的说就是一种语言,可以用于命令操作系统内核,开发应用程序,提供图像操作界面操作操作系统内核

    shell脚本
    Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
    业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
    由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
    简单的说就是控制shell语言的脚本语言(控制shell执行操作的脚本语言(不经编译直接解析运行的语言))
    shell.js就是用脚本语言js控制shell(可以控制操作系统内核的语言)

    脚本程序
    相对一般程序开发来说比较接近自然语言,可以不经编译而是解释执行,利于快速开发或一些轻量的控制。现在的脚本语言是比较多的,一般的脚本语言的执行只同具体的解释执行器有关,所以只要系统上有相应语言的解释程序就可以做到跨平台。

    • 写操作系统(NodeOS)

    nodeos
    https://www.linuxprobe.com/nodeos-operating-system.html
    我想大多数人听说过 Node.js,但是你听说过 NodeOS 吗?一个用 Node.js 写的操作系统,NodeOS 用 Linux 内核来处理各种底层任务,比如硬件通讯什么的,但是除此之外,使用的都是 Node.js。NodeOS 的开发始于两年前,创建者的目的很简单,他只是好奇,“是否有可能仅使用 Node.js 创建一个操作系统?”我们已经看到了 Node.js 在这几年已经取得如此迅猛的发展,那么我们为何不让它更酷一些呢?用它做个操作系统。
    简单的说就是基于NODE.JS运行环境和Linux内核开发出来的操作系统

    • 命令行工具(cordova/shell.js)

    cordava
    Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
    Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码。
    Cordova支持如下移动操作系统:iOS, Android,ubuntu phone os, Blackberry, Windows Phone, Palm WebOS, Bada 和 Symbian。
    --------百度百科
    这里作为命令行工具用到的是cordava利用JS访问移动设备API的功能

    shell.js
    这里是利用JS访问shell语言访问Linux操作系统内核的命令行功能

    • 反向代理(anyproxy/node-http-proxy)

    反向代理
    计算机网络中,反向代理代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在[1]。
    与前向代理不同,前向代理作为客户端的代理,将从互联网上获取的资源返回给一个或多个的客户端,服务端(如Web服务器)只知道代理的IP地址而不知道客户端的IP地址;而反向代理是作为服务器端(如Web服务器)的代理使用,而不是客户端。客户端借由前向代理可以间接访问很多不同互联网服务器(簇)的资源,而反向代理是供很多客户端都通过它间接访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器。
    -------百度百科
    简单的说,反向代理就是代理服务器替服务端隐藏IP,正向代理就是代理服务器替客户端隐藏IP

    AnyProxy
    https://github.com/alibaba/anyproxy
    AnyProxy是一个基于NodeJS的,可供插件配置的HTTP/HTTPS代理服务器。

    node-http-proxy
    https://github.com/nodejitsu/node-http-proxy
    node-http-proxy is an HTTP programmable proxying library that supports websockets. It is suitable for implementing components such as reverse proxies and load balancers.
    简单的说就是一个http代理软件

    websocket
    WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
    简单的说,websocket就是服务器与客户端的一种全双工一次握手通信方式,全双工的意思是同时读写

    • 编辑器(atom,VSCode)

    atom
    https://atom-china.org/
    Atom 是github专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言。它支持宏,自动完成分屏功能,集成了文件管理器。 [1]
    ---------百度百科

    VSCode
    https://blog.csdn.net/amyloverice/article/details/79388270
    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。
    作者:amyloverice
    来源:CSDN
    原文:https://blog.csdn.net/amyloverice/article/details/79388270
    版权声明:本文为博主原创文章,转载请附上博文链接

    相关文章

      网友评论

          本文标题:1-node概念

          本文链接:https://www.haomeiwen.com/subject/xirjuqtx.html