OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

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


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1459220145863
注意 转载须保留原文链接,译文链接,作者译者等信息。  

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 北京:后端的演讲整理而成。
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. Express入门教程:一个简单的博客
  2. ASP.NET 开发人员不必担心 Node 的五大理由
  3. 用HTML5原生实现拖放或排序
  4. 美国程序员低价雇中国人替其编程被解雇
  5. Array及String的lastIndexOf函数用法及其IE8实现,及为什么要尽量避免使用for in
  6. IBM宣布向Node.js基金会捐赠Express Framework
  7. React vs Angular 2:冰与火之歌「译」
  8. Markdown 语法简介和使用说明-详细版
  9. 谷歌人工智能AlphaGo挑战人类围棋冠军
  10. 程序bug导致了天大的损失,要枪毙程序猿吗?
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. React vs Angular 2:冰与火之歌「译」
  2. NodeJS 文件(夹)压缩/解压方案(zip/unzip)
  3. iPad/iPhone默认input按钮的disabled CSS样式不工作
  4. Array及String的lastIndexOf函数用法及其IE8实现,及为什么要尽量避免使用for in
  5. Express入门教程:一个简单的博客
  6. 用HTML5原生实现拖放或排序
  7. 如何用CSS将select/option文本居中或居右对齐
  8. 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘(数字)
  9. 掌握Node.js的文件系统[File System 基础]
  10. JavaScript也有getter/setter方法:ES5 Object对象的5个不为人知的特性

 关键字 - Node.JS
  1. Node.JS用Path将相对路径转为绝对路径
  2. 使用Node.JS监听文件夹变化
  3. Node.JS循环删除非空文件夹及子目录下的所有文件
  4. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  5. 如何用Bootstrap免费网站模板和OnceAir云盘搭建个人网站服务器
  6. Node.JS如何查看本地MAC/IP地址、计算cpu使用率和内存容量
  7. Express入门教程:一个简单的博客
  8. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  9. 如何收集捕获Node中的未处理的错误异常信息?
  10. trim-html:NodeJS的HTML文本截取库(自动生成正文摘要)

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号