Node.js 的本质
下面是一条数据的旅程,这条数据我们叫他req
。
req在浏览器很无聊,通过网络跑到了Node.js服务器,它的目的是想见到国王server.js(你编写的代码)
,req想和server.js要一个html文件,可它进入服务器时,迎接它的是个大臣,大臣告诉他,server.js正在接待另一个req,请他等0.1毫秒。终于req见到了国王,国王的会议室挺漂亮的,下面是会议室的大体样子:
server.on(“request”,function(req,res){ })
req和server.js要一个hello.html
的网页文件,这时候它看到会议室外面还有几个req在等待,server.js国王把任务交给了 fs
大臣,然后马上就去接待另一个req了,req心里想国王的效率好高啊,难道这就是传说中的永不阻塞的 I/O 吗
,这时候fs
大臣帮它把hello.html文件送上了返程的列车res
。
server.on(“request”,function(req,res){ fs.createReadStream(“hello.html”).pipe(res); })
req回到浏览器后,感慨Node.js 国家办事效率,它在日记中写下:
通过集权的编码方式,让代码更加好管理、更好维护,避免多线程带来的死锁等后遗症。通过非阻塞异步 I/O 的调用,把耗时的工作交给底下人去办,而不是等待I/O完成后再进行下一步的工作,而是通过事件模式,监听工作进度,这段时间里,Node.js还可以不 间断的处理其他请求。等到I/O处理完毕后,会接收到一个事件。
Node.js是什么?
Node提供一种简单的构建可伸缩网络程序的方法。在 Java 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。
Node更改了连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程。它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。它的服务器能支持数万个并发连接。
Node.js背后真正的优势
Node.js 有很多优势,在我看来除了高性能外,它统一了前后端语言和数据 (json),这才是它最大优势。paypal公司全面转至Node.js技术,主要原因是Node.js提高了开发效率,同时也节省了成本。
难学吗?
只要会javascript基本知识即可,javascript的运行环境通常是浏览器,Node.js给了javascript在服务器端运行环境,这个环境下,还配备了一套API,包括I/O、网络等功能。