一, 使用 Node.JS 能解决什么问题
对于 PHP,JAVA,Python 等服务端语言中, 为每个客户端连接创建一个新的线程, 而每个线程需要大约 2M 的内存, 理论上, 具有 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右, 要让 web 应用程序支持更多的用户, 就需要增加服务器的数量, 这样硬件的成本就增加了.
服务器所支持的最大同时连接用户量是一个主要的瓶颈.
Node.JS 是一个用于开发各种 Web 服务器的开发工具, 运行的是高性能的 V8 JavaScript 脚本语言,
什么是 V8JavaScript?
V8 JavaScript 是由 Google 公司使用 C++ 语言开发的一种高性能 JavaScript, 该引擎并不局限于在浏览器中运行. 在 V8 引擎内部使用了一种全新的编译技术, 高端的 JavaScript 脚本代码与开发者编写的低端的 C 语言具有非常相似的执行效率
二, Node.JS 的两种机制
非阻塞型 I/O
JavaScript 的一个特点是它只支持单线程, 因此不需要担心会造成死锁的现象.
与客户端脚本语言不同的是, Node.JS 中为 V8 JavaScript 提供了非阻塞型 I/O 机制.
例如, 在访问数据库取得搜索结果的时候, 在开始访问数据库之后, 数据库返回结果之前, 存在一段时间的等待.
在传统的单线程处理机制中, 在执行了访问数据库的代码之后, 整个线程都将暂停下来, 等待数据库返回查询结果之后才能继续执行其后面的代码. 也就是 I/O 操作阻塞了代码的执行, 极大的降低了程序的执行效率.
由于 Node.JS 中采用了非阻塞型 I/O 机制, 因此在执行访问数据库的代码之后将立即转而执行其后面的代码, 把数据库返回结果的处理代码放在回调函数中执行, 从而提高了程序的执行效率.
事件环
在 Node.JS 中, 在一个时刻只能执行一个事件回调函数, 但是在执行一个事件回调函数的中途可以转而执行其他事件, 然后返回继续执行原事件回调函数, 这种处理机制叫事件环机制
三, Node.JS 适合什么开发场景?
当应用程序需要处理大量并发的输入 / 输出, 而在向客户端发出响应之前, 应用程序内部并不需要进行非常复杂的处理的时候
聊天服务器
在一个人气很高的聊天应用程序中, 在同一时刻通常可能存在大量用户与聊天服务器之间的并发连接, 而服务器本身并不存在非常复杂的处理
综合服务类网站 , 电子商务网站的服务器
这类网站中, 往往可能在每秒钟内接收到多达上千条数据并且需要将这些数据写到数据库中, 如果使用其他的服务器 (Apache 或 Tomcat), 需要为每条数据的写入等待一段时间. 而 Node.JS 将通过其队列机制将这些数据迅速写到缓存区中, 再通过每一个单独的处理从缓存中取出这些数据再写到数据库中, 因为其使用的是非阻塞型的 I/O 机制, 因此可以同时实现这些数据到数据库中的写入, 而不必为每条数据等待一段时间
来源: http://www.bubuko.com/infodetail-3161527.html