我们来看一下什么是阻塞操作;
我模拟一个sleep()方法来使hello star延迟10秒打印。
requestHandlers.js
function start() { console.log("Request handler 'start' was called."); function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < startTime + milliSeconds); } sleep(10000); return "Hello Start"; } function upload() { console.log("Request handler 'upload' was called."); return "Hello Upload"; } exports.start = start; exports.upload = upload;
请求/start的时候,延迟了10秒才打印。
请求/upload的时候,并不会受影响。
接下来做一个试验:
在第一个浏览器窗口的地址栏中输入 http://localhost:8888/start,但是先不要打开它!
在第二个浏览器窗口的地址栏中输入 http://localhost:8888/upload,同样的,先不要打开它!
我们在第一个窗口中(“/start”)按下回车,然后快速切换到第二个窗口中(“/upload”)按下回车。
注意,发生了什么:
/start URL 加载花了 10 秒,这和我们预期的一样。
/upload URL 居然也花了 10 秒!
可以它在对应的请求处理程序中并没有类似于 sleep()这样的操作啊,这是什么问题?
原因就是start()包含了阻塞操作。形象的说就是“它阻塞了所有其他的处理工作”。
Node.js 是单线程的,它可以在不新增额外线程的情况下对任务进行并行处理。
它通过事件轮询(event loop)来实现并行操作,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。
下一节我们将介绍一下如何实现非阻塞操作。
本文向大家介绍轻松创建nodejs服务器(9):实现非阻塞操作,包括了轻松创建nodejs服务器(9):实现非阻塞操作的使用技巧和注意事项,需要的朋友参考一下 我们要将response对象(从服务器的回调函数onRequest()获取)通过请求路由传递给请求处理程序。随后,处理程序就可以采用该对象上的函数来对请求作出响应。 我们先对server.js做出修改: 我们将response对象作为第三个
本文向大家介绍轻松创建nodejs服务器(8):非阻塞是如何实现的,包括了轻松创建nodejs服务器(8):非阻塞是如何实现的的使用技巧和注意事项,需要的朋友参考一下 这节我们来了解一下nodejs实现非阻塞操作的方法。 我们先来修改一下 start的处理程序: 这段代码,创建了一个新的变量content(初始值为“empty”),执行“ls -lah”命令,将结果赋值给content,最后将co
本文向大家介绍轻松创建nodejs服务器(6):作出响应,包括了轻松创建nodejs服务器(6):作出响应的使用技巧和注意事项,需要的朋友参考一下 我们接着改造服务器,让请求处理程序能够返回一些有意义的信息。 我们来看看如何实现它: 1、让请求处理程序通过onRequest函数直接返回(return())他们要展示给用户的信息。 2、让我们从让请求处理程序返回需要在浏览器中显示的信息开始。 我们需
本文向大家介绍轻松创建nodejs服务器(4):路由,包括了轻松创建nodejs服务器(4):路由的使用技巧和注意事项,需要的朋友参考一下 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。 第一步我们需要先解析出请求URL的路径,我们引入url模块。 我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径: 好了,pathname就是请求
本文向大家介绍轻松创建nodejs服务器(2):nodejs服务器的构成分析,包括了轻松创建nodejs服务器(2):nodejs服务器的构成分析的使用技巧和注意事项,需要的朋友参考一下 紧接上一节,我们来分析一下代码: 第一行请求(require)Node.js自带的 http 模块,并且把它赋值给 http 变量。 接下来我们调用http模块提供的函数: createServer 。 这个函数
本文向大家介绍轻松创建nodejs服务器(1):一个简单nodejs服务器例子,包括了轻松创建nodejs服务器(1):一个简单nodejs服务器例子的使用技巧和注意事项,需要的朋友参考一下 我们先来实现一个简单的例子,hello world。 似乎每种语言教程的第一节都会讲这个,我们也不例外。 首先我们先创建一个项目目录,目录可自己定义,本案例的目录为 e:/nodetest/。 由于我们要搭建