Articles of 阻塞

Node.js Express块

我的问题是,我打算使用快递caching我接收一段时间的所有请求,直到我一次发送所有的响应。 但不幸的是,我不能收到第二个要求,直到我回应了第一个。 所以我想node / express是以某种方式阻止其他请求的进一步处理。 我为你build立一个最小的工作范例,这样你就可以更好地看到我在说什么。 var express = require('express'); var app = express(); var ca = []; app.get('/hello.txt', function(req, res){ ca.push(res); console.log("Push"); }); setInterval(function(){ while (ca.length) { var res = ca.shift(); res.send('Hello World'); console.log("Send"); } },9000); var server = app.listen(3000, function() { console.log('Listening on port %d', server.address().port); }); 当我只发送一个请求到localhost:3000并等待9秒,我可以发送第二个。 但是,当我发送两个而不等待间隔的callback,第二个被阻塞,直到第一个间隔触发。 长话短说:为什么这种阻塞发生,以及如何避免这种阻塞。 PS:看来默认的http包显示了另一个行为http://blog.nemikor.com/2010/05/21/long-polling-in-nodejs/

Node.js阻塞?

我想我只是发现了node.js或浏览器中的一些奇怪的东西。 所以node.js应该是非阻塞的,但是一个简单的setTimeout会阻塞同一个客户端的整个网站。 这是服务器代码: // Create HTTP Server var http = require('http'); // Create page number holder var page = 0; http.createServer(function (req, res) { // Increment Page Number page++; // Log page load console.log('LOAD PAGE', page); // Set response header res.writeHead(200, {'Content-Type': 'text/plain'}); // Wait 10 seconds and write Hello World message to client. setTimeout(function(){ […]

在NodeJS上阻塞function

我正在使用NodeJS构build一个API的SDK,可以在这里find。 我的问题是,当用户声明模块时,它会提供我需要validation的用户名和密码以及必须用于将来调用的令牌。 所以,这个令牌存储在irecarga.token,并且为了每一个将来的呼叫,我将不得不使用它来识别用户。 我的问题是,如果用户在声明后直接调用另一个函数,声明可能不会及时完成(因为它执行HTTP POST),属性标记将为空。 // module declaration which requires a HTTP call and updates irecarga.token var irecarga = require('../')({ username: process.env.IRECARGA_USERNAME, password: process.env.IRECARGA_PASSWORD }) // function called straight after declaration which uses irecarga.token irecarga.getServiceProviders(48, function(err, data){ // this code won't even run because the token = null will break the code console.log('err: ', err) […]

监视阻止调用nodejs

我试图连接到第三方库,它有一个function,可以阻止。 我想用它,但没有阻塞。 是否有可能包装一个我没有控制的阻塞调用,使其asynchronous? // calling this function will block the nodejs thread blockingCall(); 我想是这样的。 // wrapper for the blocking call var wrapper = wrapBlockingCall(blockingCall); wrapper.on('complete', function() {}); 这可能吗? 这有道理吗?

Node.js我的请求没有被阻止

我是新来的node.js,我试图调用一个服务,parsing它的数据,并返回它作为一个视图的一部分。 我似乎无法得到阻止的请求,直到响应完成。 控制台总是在“正确”之前logging“错误”(返回1,2,3数组)。 我错过了什么? app.js var reading = require('./reading'); app.get('/reading', function(req, res){ res.render('reading/index.stache', { locals : { ids : reading.list}, partials : { list : '{{#ids}}{{.}}<br />{{/ids}}' } }); }); reading.js var request, http = require('http'), host = 'google.com', path ='/'; var list = function(){ var connection = http.createClient(80, host), request = connection.request(path); request.addListener('response', function(response){ […]

在顺序HTTP请求阻止操作在节点?

请注意,对我的问题不相关的信息将被“引用” 像这样(随意跳过这些)。 问题 我正在使用节点代表多个客户端进行按顺序的HTTP请求。 这样,最初拿客户端几个不同的页面加载得到所需的结果,现在只通过我的服务器采取一个单一的请求。 我目前正在使用“asynchronous”模块进行stream量控制和“请求”模块进行HTTP请求。 大约有5个callback,使用console.time,从开始到结束需要大约2秒(草图代码如下)。 现在我对节点不熟悉,但是我知道节点的单线程本质。 虽然我已经多次阅读了这个节点,并不是为CPU绑定的任务而构build的,但是我直到现在才真正理解这个意思。 如果我对所发生的事情有正确的理解,这就意味着我目前所拥有的(在开发中)决不会超过10个客户。 题 因为我不是节点的专家, 所以我问这个问题(在标题中)来得到确认,使得几个连续的HTTP请求确实阻塞。 结语 如果是这样的话,我希望我会问一个不同的SO问题(在做适当的研究之后)讨论各种可能的解决scheme,如果我select继续在节点中处理这个问题(这本身可能不适合我正在尝试的去做)。 其他闭幕的想法 如果这个问题不够详细,太不清白,或者特别花言巧语(我尽量简洁),我真的很抱歉。 感谢和所有的人都可以帮助我的问题! 我之前提到的代码: var async = require('async'); var request = require('request'); … async.waterfall([ function(cb) { console.time('1'); request(someUrl1, function(err, res, body) { // load and parse the given web page. // make a callback with data parsed from the web […]

在事件队列被阻塞的时候,Node.js服务器可以接受传入的请求吗?

所以我刚开始深入Node,并且我明白I / O是非阻塞的,事件循环是阻塞的,但是我想知道的是: 如果你有阻塞事件队列的代码,服务器是否仍然可以在队列尾部放置传入的请求,或者所有的请求都超时/反弹?

如何检测和测量node.js中的事件循环阻塞?

我想监视node.js中事件循环的每次运行需要多长时间。 但是,我不确定测量这个最好的方法。 我能想出最好的方式是这样的: var interval = 500; var interval = setInterval(function() { var last = Date.now(); setImmediate(function() { var delta = Date.now() – last; if (delta > blockDelta) { report("node.eventloop_blocked", delta); } }); }, interval); 我基本上通过查看setInterval的延迟推断事件循环运行时间。 我在阻塞的节点模块中看到了相同的方法,但感觉不准确和沉重。 有没有更好的方法来获得这些信息? 更新:更改了代码使用setImmediate作为setImmediate完成。