100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 轻松创建nodejs服务器(9):实现非阻塞操作【node.js】

轻松创建nodejs服务器(9):实现非阻塞操作【node.js】

时间:2019-06-21 09:47:31

相关推荐

轻松创建nodejs服务器(9):实现非阻塞操作【node.js】

web前端|js教程

nodejs,服务器,非阻塞操作

web前端-js教程

我们要将response对象(从服务器的回调函数onRequest()获取)通过请求路由传递给请求处理程序。随后,处理程序就可以采用该对象上的函数来对请求作出响应。

frozenui 案例源码,vscode里怎么插入图片,桌面共享ubuntu,tomcat 页面找不到,数据爬虫 平台,php图片排序,忠县服务型seo推广,图片用什么网站源码,淘宝手机端购物车模板lzw

我们先对server.js做出修改:

飞禽走兽手机版源码,vscode怎么编译文件,ubuntu 硬盘命令,tomcat谁开发的,uipath做爬虫,php 防止跨站攻击,必火seo优化系统加盟,织梦网站日志,动网论坛模板下载lzw

var http = require("http");

var url = require("url");

function start(route, handle) {

function onRequest(request, response) {

var pathname = url.parse(request.url).pathname;

console.log("Request for " + pathname + " received.");

route(handle, pathname, response);

}

http.createServer(onRequest).listen(8888);

console.log("Server has started.");

}

exports.start = start;

vb远程源码,vscode带返回参数,ubuntu 重启声卡,tomcat+as7,儿歌爬虫,php 课程介绍,游戏行业seo优化运营,php网站 虚拟币,微信第三方模板lzw

我们将response对象作为第三个参数传递给route()函数,并且,我们将onRequest()处理程序中所有有关response的函数调都移除,因为我们希望这部分工作让route()函数来完成。

接下来修改 router.js:

function route(handle, pathname, response) {

console.log("About to route a request for " + pathname);

if (typeof handle[pathname] === function) {

handle[pathname](response);

} else {

console.log("No request handler found for " + pathname);

response.writeHead(404, {"Content-Type": "text/plain"});

response.write("404 Not found");

response.end();

}

}

exports.route = route;

同样的模式:相对此前从请求处理程序中获取返回值,这次取而代之的是直接传递response对象。 如果没有对应的请求处理器处理,我们就直接返回“404”错误。

接下来修改requestHandler.js:

var exec = require("child_process").exec;

function start(response) {

console.log("Request handler start was called.");

exec("ls -lah", function (error, stdout, stderr) {

response.writeHead(200, {"Content-Type": "text/plain"});

response.write(stdout);

response.end();

});

}

function upload(response) {

console.log("Request handler upload was called.");

response.writeHead(200, {"Content-Type": "text/plain"});

response.write("Hello Upload");

response.end();

}

exports.start = start;

exports.upload = upload;

我们的处理程序函数需要接收response参数,为了对请求作出直接的响应。 start处理程序在exec()的匿名回调函数中做请求响应的操作,而upload处理程序仍然是简单的回复“Hello World”,只是这次是使用response对象而已。

如果想要证明/start处理程序中耗时的操作不会阻塞对/upload请求作出立即响应的话,可以将requestHandlers.js修改为如下形式:

var exec = require("child_process").exec;

function start(response) {

console.log("Request handler start was called.");

exec("find /",

{ timeout: 10000, maxBuffer: 20000*1024 },

function (error, stdout, stderr) {

response.writeHead(200, {"Content-Type": "text/plain"});

response.write(stdout);

response.end();

}

);

}

function upload(response) {

console.log("Request handler upload was called.");

response.writeHead(200, {"Content-Type": "text/plain"});

response.write("Hello Upload");

response.end();

}

exports.start = start;

exports.upload = upload;

这样一来,当请求http://localhost:8888/start的时候,会花10秒钟的时间才载入,而当请求http://localhost:8888/upload的时候,会立即响应,纵然这个时候/start响应还在处理中。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。