网络科技网站建设,特色网站建设,扁平wordpress主题,翠竹林wordpress主题Node.js 是什么#xff1f; Node.js 采用 C语言编写而成#xff0c;浏览器内核 V8 做为执行引擎#xff1b; Node 不是 JS 应用、而是一个 Javascript 的运行环境。 Node 保留了前端浏览器 js 的接口#xff0c;没有改写语言本身的任何特性#xff0c;依旧基于作用域和原型…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