Node.js 是什么?

Node.js 采用 C++语言编写而成,浏览器内核 V8 做为执行引擎; Node 不是 JS 应用、而是一个 Javascript 的运行环境。 Node 保留了前端浏览器 js 的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链。

Node.js 是一个为实时 Web ( Real-time Web )应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式 I/O 、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率。

Node.js 的特点

1 、一个 Javascript 运行环境 
2 、依赖于 Chrome V8 引擎进行代码解释 
3 、事件驱动 
4 、非阻塞 I/O 
5 、轻量、可伸缩,适于实时数据交互应用 
6 、单进程,单线程

Node.js 能做什么?

1 、具有复杂逻辑的网站 
2 、基于社交网络的大规模 Web 应用; 
3 、 Web Socket 服务器(页游, web IM ); 
4 、 TCP/UDP 套接字应用程序; 
5 、命令行工具; 
6 、交互式终端程序; 
7 、带有图形用户界面的本地应用程序; 
8 、单元测试工具; 
9 、客户端 JavaScript 编译器

Node.js 架构

事件循环

NodeJs 执行模型: 单线程 Event Loop

当应用请求发生时,首先进入 V8 引擎,然后进入到事件队列,可以理解为他们在不断地在循环,看是否有任务,产生任务就去执行。上图是单线程模型。

NPM

后端在开发其他语言时,都有一些模块的概念或者第三方提供了很实用的小模块。同样, Node.js 当时出来的时候也有这样一个仓库。这个仓库就是专门用来管理中国开发者的一个贡献的模块,而且发展非常的快。同样,前端有一些脚手件,在服务器这边运行的有 debug , express , express-session , thrift ,依托这个插件做 thrift 相关的事情, images 其他的一些你想的到的插件,都是可以从它找到。

架构体系

上图是个推部分 WEB 平台的架构体系,个推有一套云组进资源,通过 Nginx 作为一个分发, Node 可以有多个节点,通过 session 进入。每一个 Node 都有模式,相信大家在部署的时候肯定不可能部署一个节点,部署一个节点,否则这个节点挂了就是挂了。

Thrift 使用

1 、定义接口

2 、编译,生成对应的包,并上传到相应的库中 
3 、在 Node 中使用,如下:

注意:这里有个坑

thrift 中有个基本类型叫做 double ( 64 位浮点数)。当定义成这个类型时,数据从 java 过来到 Node 会变成全是 0 。

解决方案

定义成 string 类型,之后特事特办,如必要则在 Node 处再转成浮点数,或者直接由页面端处理。 
IP 负载( IP Load Balance )

负载均衡

分摊到多个操作单元上进行执行,例如 Web 服务器、 FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 
原生中其并没有负载均衡的机制,但我们可以采用动态代理的设计模式,基于 thrift client ,利用 JS 的原型链来实现。 
均衡的方式有很多种,我们使用轮询机制来实现访问多个 Java 节点。

session 管理

Node 本身并无 session 机制,我们可以使用 express-session 包来实现,同时通过 redis 来存储 session 。

连接池

传统读取数据库方式:

连接池需要做什么?

1 、连接预热 (启动时自动打开 n 个连接以供使用) 
2 、使用 例如 轮转法 均匀分发 连接请求 
3 、当池中的连接即将耗尽得时候动态产生新的连接 
4 、当池中的连接一段时间没有被调用的时候,自动释放连接 
5 、自动丢弃 已经坏掉的 连接 
6 、系统关闭的时自动释放所有连接

基于此,我们也可以借助几个插件包(如 generic-pool ( node-pool )、 node-thrift-pool ,当然,如果你直接 Node 连接的 DB ,基本上那个包里面也会支持连接池)在 Node 使用连接池。

使用示例

利用 Node 可以做的事情

1 、做一些灰色地带的事情 
利用 Node 可以做一些灰色地带的事情,因为它拥有前端的优点,可以异步,发起异步请求。给开发者带来很大的好处。不过,你需要管理好你的类型。如果说类型自己如果没有管理好就是会出现一些问题。同时它也可以做后端的一些事情。比如说连接池等等。 
2 、模块更加分明 
3 、可前可后便于分工 
从浏览器过来的数据,通过 Node 把这一层数据转化成 java 需要的一种数据结构,就可以使得分工更加明晰。 
4 、共用表单输入验证 
如果你在写系统的时候,出于安全考虑,无论浏览器这边做了多少验证,你都要做输入验证。传统模式下是需要 java 同学写一份,前端同学写一份。因为 Node 跟 java 都是部署在服务器集群或者一个区域,你可以相信这两边之间一个数据。来自浏览器的验证,就可以共用表单输入验证,达到节省成本的目的。

以上内容来自个推 web 服务首席架构师姜季廷在 3 月 12 日 SegmentFault D-Day 北京:后端的演讲整理而成。

本文来自https://www.v2ex.com/t/266827

转载于:https://www.cnblogs.com/wangxishan/p/6369996.html

五个最佳案例带你解读 Node.js 的前后之道相关推荐

  1. 五个最佳案例带你解读Node.js的前后之道

    2019独角兽企业重金招聘Python工程师标准>>> Node.js 是什么? Node.js采用C++语言编写而成,浏览器内核V8做为执行引擎:Node不是JS应用.而是一个Ja ...

  2. 【实习日记】第五天 剖析源码+学习Node.js Typescript基本语法

    国庆假期结束了,其实在这里实习对我而言还算是比较愉快的,虽然完成任务过程中出现的问题层出不穷,但也被克服问题的成就感包裹着,感觉每天在办公室就像在上自习一样.加油啦小荷! 自从把example运行成功 ...

  3. 带你理清Node.js 的Web框架的3个层次

    web 框架指的是处理 http.https 的服务端框架,Node.js 提供了 http.https 模块用于处理协议数据,这是 web 框架的基础. 但是 http.https 的 api 过于 ...

  4. 带你了解Node.js包管理工具:包与NPM

    摘要:包与NPM Node组织了自身的核心模块,也使得第三方文件模块可以有序的编写和使用. 本文分享自华为云社区<NodeJs深入浅出之旅:包与NPM>,作者:空城机. 包与NPM Nod ...

  5. 手把手带你写Node.JS版本小游戏

    JavaScript的出现催动了前端开发的萌芽,前后端分离促进了Vue.React等开发框架的发展,Weex.React-Native等的演变赋予了并存多端开发的能力,而Node.JS的面世无疑是推动 ...

  6. 万事起头难:完整步骤带你学会Node.js环境配置

    1.nodeJs下载地址,这里可以选择你想要的版本,我这里以14.15.1为例 2.下载完成后,直接傻瓜式安装即可. 3.打开命令行(以管理员身份打开),输入node -v,出现以下版本号,代表nod ...

  7. Node.js CLI 工具最佳实践

    为什么写这篇文章? 一个糟糕的 CLI 工具会让用户觉得难用,而构建一个成功的 CLI 需要密切关注很多细节,同时需要站在用户的角度,创造良好的用户体验.要做到这些特别不容易. 在这个指南中,我列出了 ...

  8. Node.js(一):基础知识

    一.浏览器 1 浏览器工作原理 1.1 浏览器的组成 人机交互部分(UI) 网络请求部分(Socket) JavaScript引擎部分(解析执行JavaScript) 渲染引擎部分(渲染HTML.CS ...

  9. Node.js爬虫一站到底系列先导篇

    前言: 在web编程课上,老师布置了爬虫任务,而没有任何经验和相关方面知识的小白简直一头雾水,不知道该如何下手.一开始抱着一本厚厚的犀牛书啃了好几天,本以为对Javascipt语法有一定了解后便可以自 ...

最新文章

  1. android手机装windows,安卓手机上运行WindowsXP系统图文教程
  2. LatentFusion:华盛顿大学与英伟达联合提出6D姿态估计新方法
  3. Android Studio 3.5 Canary 12 发布
  4. springMVC入门配置及helloworld实例
  5. html javaScript 只能输入数字
  6. vue-router 的常见用法
  7. redis 公网ip访问_Redis很重要,怎么只允许指定IP访问?
  8. java生成UUID通用唯一识别码
  9. mysql sql优化器_MySQL SQL优化之‘%’
  10. 图论 —— 图的连通性 —— Tarjan 求强连通分量
  11. Web程序中将Cell华表的修改 保存到数据库或服务器端文件夹内
  12. ubuntu启动时的初始化信息二
  13. Tomcat原理剖析及性能调优
  14. Ubuntu16.04 pip下载安装tensorflow(GPU版)
  15. 服务端技术进阶(三)从架构到监控报警,支付系统的设计如何步步为营
  16. 不一般的电路设计——什么是电压采集采样?
  17. MCU升级文件HEX、BIN、S19格式概述
  18. 调查上网行为管理软件(或设备)
  19. 2021浙江大学计算机招生目录,【院校】2020-2021浙江大学历史学考研专业目录、院校分析、录取名单...
  20. 团队协作一、onlyoffice协同开发使用

热门文章

  1. 绘制半圆_超细致:Ai绘制萌蠢可爱卡通形象
  2. android 模拟器read-only file system,WAC启动Android模拟器 transfer error: Read-only file system错误解决方法...
  3. lsof -i:port 的作用
  4. matlab模糊推理,模糊推理系统的matlab代码
  5. 后端:spring提供的钩子,你知道哪些?
  6. jdk环境变量配置_jmeter及jdk的环境变量配置
  7. python convert函数_Python内置函数
  8. execjs执行js出现window对象未定义时的解决_10个常见的JS语言错误总汇
  9. html自动滑动轮播代码,html+css+js 实现自动滑动轮播图
  10. Android 第一课 Activity