源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Node.js简单入门前传

  • 时间:2021-01-08 14:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Node.js简单入门前传
[b]1.什么是NodeJS[/b] 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎(Google的Chrome浏览器使用的JavaScript执行环境), V8引擎执行Javascript的速度非常快,性能非常好。 [b]2.为什么选择NodeJS[/b] 如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。 Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。 当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。 [b]3.NodeJS的特点[/b] 我们先来看看NodeJS官网上的介绍:   Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.   [b]其特点为:[/b]   1. 它是一个Javascript运行环境   2. 依赖于Chrome V8引擎进行代码解释   3. 事件驱动   4. 非阻塞I/O   5. 轻量、可伸缩,适于实时数据交互应用   6. 单进程,单线程 [b]异步、事件驱动模型[/b] [img]http://files.jb51.net/file_images/article/201708/2017082111382213.png[/img]        我们同样是要发起请求,等待服务器端响应;但是与银行例子不同的是,这次我们点完餐后拿到了一个号码,   拿到号码,我们往往会在位置上等待,而在我们后面的请求会继续得到处理,同样是拿了一个号码然后到一旁等待,接待员能一直进行处理。   等到饭菜做号了,会喊号码,我们拿到了自己的饭菜,进行后续的处理(吃饭)   这个喊号码的动作在NodeJS中叫做回调(Callback),能在事件(烧菜,I/O)处理完成后继续执行后面的逻辑(吃饭),   这体现了NodeJS的显著特点,异步机制、事件驱动   整个过程没有阻塞新用户的连接(点餐),也不需要维护已经点餐的用户与厨师的连接        Node.Js使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)   基于这样的机制,理论上陆续有用户请求连接,NodeJS都可以进行响应,因此NodeJS能支持比Java、PHP程序更高的并发量   虽然维护事件队列也需要成本,再由于NodeJS是单线程,事件队列越长,得到响应的时间就越长,并发量上去还是会力不从心   [b]总结一下NodeJS是怎么解决并发连接这个问题的:[/b]   更改连接到服务器的方式,每个连接发射(emit)一个在NodeJS引擎进程中运行的事件(Event),放进事件队列当中,   而不是为每个连接生成一个新的OS线程(并为其分配一些配套内存) [b]I/O阻塞[/b] NodeJS解决的另外一个问题是I/O阻塞,看看这样的业务场景:需要从多个数据源拉取数据,然后进行处理   (1)串行获取数据,这是我们一般的解决方案,以PHP为例 [img]http://files.jb51.net/file_images/article/201708/2017082111382214.png[/img]   假如获取profile和timeline操作各需要1S,那么串行获取就需要2S   (2)NodeJS非阻塞I/O,发射/监听事件来控制执行过程 [img]http://files.jb51.net/file_images/article/201708/2017082111382215.png[/img]   NodeJS遇到I/O事件会创建一个线程去执行,然后主线程会继续往下执行的,   因此,拿profile的动作触发一个I/O事件,马上就会执行拿timeline的动作,   两个动作并行执行,假如各需要1S,那么总的时间也就是1S   它们的I/O操作执行完成后,发射一个事件,profile和timeline,   事件代理接收后继续往下执行后面的逻辑,这就是NodeJS非阻塞I/O的特点   总结一下:   Java、PHP也有办法实现并行请求(子线程),但NodeJS通过回调函数(Callback)和异步机制会做得很自然 [b]4. NodeJS的优缺点[/b]   优点:   1. 高并发(最重要的优点)   2. 适合I/O密集型应用     缺点:   1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;     解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;   2. 只支持单核CPU,不能充分利用CPU   3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃     原因:单进程,单线程     解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;          (2)开多个进程监听同一个端口,使用cluster模块;   4. 开源组件库质量参差不齐,更新快,向下不兼容   5. Debug不方便,错误没有stack trace [b]总结[/b] 以上所述是小编给大家介绍的Node.js简单入门前传,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部