node.js事件驱动的非阻塞 I/O模型理解

都说Node.js是一个基于chrome V8引擎的js运行环境,用于方便地搭建响应速度快、易于扩展的网络应用,它有非阻塞、事件驱动模型的特性,有轻量高效的特点,适用于分布式设备上运行数据密集型的实时应用。那什么是非阻塞?什么是事件驱动?下面举一个例子。
在我们使用比较传统的服务器阿帕奇(Apache)的时候,客服端给服务器请求数据的时候,服务器接收到请求便开始搜索被请求的资源,服务器没有改资源,便进一步向数据库检索资源,最后把搜索到的资源返回给客户端。也就是说,客户端每请求一次,服务器便创建一个新的进程来处理这个请求,每次都会将整个页面刷新了,而每个客户端请求,服务器就得开一个请求链接即占一个进程,到一定数量请求,服务器的内存会消耗完甚至瘫痪。

随着Ajax的异步处理出现解决了这个问题,当客户端向服务器请求时,页面不会完全刷新,只会更新请求的那一部分,这样节省了好多资源空间。

客户端与服务器之间是基于Ajax的通信方式,分为短连接和长轮询。短连接的HTTP请求不会一直相连接不间断的,客户端发出请求到最后服务器返回数据这个连接件中断结束了。而长轮询是持续连接,只要页面加载完了,不管有没有请求服务器,你都会自动向服务器发一个Ajax请求,服务器持续这个连接,直到客户端请求才会将数据结果返回给客户端,如下图所示。
node.js事件驱动的非阻塞 I/O模型理解_第1张图片
综上所述,非阻塞就好比一个环形跑道,一个客户端请求来了就与它连接,将这个请求给其他进程,然后响应一个回调函数,接着接受别的请求。而事件驱动就是服务器只在用户那边有事件发生才会响应。

你可能感兴趣的:(node.js,ajax)