初窥Nodejs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初窥Nodejs相关的知识,希望对你有一定的参考价值。

一、Node.js 究竟是什么?

  1. Node .js是一个服务器端 javascript 解释器;
  2. 是一个构建在Chrome JavaScript运行环境的平台,这是很重要的一点,node.js并不是一门语言,而是一个平台;
  3. 致力于使构建速度快、稳定的网络程序更简单;
  4. 具有事件驱动和非阻塞I/O的特色,使之轻量级并且高效率;
  5. 非常适合在分布式设备运行数据密集型实时应用程序。

 

  既然想了解Node.js,那么就用它向世界打个招呼吧!

  1.在nodejs文件加下面创建一个js文件,例如:hello.js

  2.hello.js文件里的内容如下:

var http=require(http);//引入http module
http.createServer(function(request,response){//创建一个web server
  //回调函数,这样创建server方法就不会阻塞了
  response.writeHead(200,{contentType:text/plain});
  response.end(Hello World!\n);
}).listen(8124);
console.log(Server running at http://127.0.0.1:8124/);

  3.调出cmd.exe,使用  cd \.....\nodejs   到达nodejs文件目录,再输入 node hello.js 运行

  4.打开浏览器,在地址栏输入你设置的端口号  http://127.0.0.1:8124/,刷新,显示“Hello World!”

 

二、Node.js的优点

  nodejs作为一个新兴的后台语言,有很多吸引人的地方:
  RESTful API
  单线程
  Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处理 —— Node.js是单线程的。它通过事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。
  非阻塞IO
  V8虚拟机
  事件驱动

三、Node 旨在解决什么问题?

  Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 php 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

  Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。

  现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。

 

四、Node.js的应用方向

  在几年的时间里,Node.JS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Node.JS进行开发,此外,开发人员还可以使用它来开发一些快速移动Web框架。
  除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其它方面所开发的十大令人神奇的项目,这些项目涉及到应用程序监控、媒体流、远程控制、桌面和移动应用等等。

 

以上是关于初窥Nodejs的主要内容,如果未能解决你的问题,请参考以下文章

特征究竟是什么

法定数字货币究竟是什么?

“元宇宙”究竟是什么

LLVM 究竟是啥?

微服务究竟是什么?

Secondary NameNode究竟是做什么的