私はローカルホスト/ Aに乗る作るとき、それが完了するまで約2.3秒かかることがわかりコードExpressJS - 同時リクエストの処理方法リクエストはお互いをブロックしているようです。
var express = require('express');
var routes = require('./routes');
var http = require('http');
...
app.get('/a',function(){
Card.findCards(function(err, result){ //Mongoose schema
res.send(result); //Executes a query with 9000 records
})
});
app.get('/b', function(req, res){
res.send("Hello World");
});
の以下の部分を持っています。これは、データベースからかなりのデータを取り出すので、これは驚くことではありません。しかし、もし私がGET/b中に/ aがロードされていれば、bは表示されません。これは/ aへの呼び出しが/ bへの呼び出しをブロックしているかのようです。
expressはどのように動作するはずですか?私は、コールバックを取るので個々のルートが非同期であることを前提にしていましたが、エクスプレスのように一度に1つのリクエストしか処理できないようです。 res.end()が呼び出されるまで、他のリクエストは処理されません。私がしなければならない設定がありませんか?ここではカードのモデルと関連付けられているスキーマ+のコードは次のとおりです。参考までに、これは私が
mongoose.connect(dbConnectionString, {server:{poolSize:25}});
そして、この私のhttpサーバの初期化部分である
http.globalAent.maxSockets = 20; // or whatever
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
EDITをマングースに接続する方法
です機能
//Card.js
var mongoose = require('mongoose')
, Schema = mongoose.Schema;
var CardSchema = new Schema({
_id : {type: String},
stores : [{
store: {type: Schema.Types.ObjectId, ref:'StoreModel', required: true}
, points: {type: Number, required: true}
}]
});
exports.findCards = function(callback){
var query = Card.find({}, callback);
}
だから、マングースデシベルのコールがブロックされている
を参照してください?私はいつもdbコール(入力のような)は非ブロッキングでコールバックの使用を考えていました。 – pauloadaoag
Moongoose db呼び出しは、あなたのアプリがmongoの応答を待つことによってブロックされないという意味で非ブロックですが、mongoから到着して数千のレコードをバッファして処理する必要があります。反応器 – bbozo
それは本当かもしれませんが、私はCPUを消費する前にres.send( "hello world")と呼ばれるテストを行いました。 mongooseコールを単純な睡眠に置き換えても、同じことが起こった。 mongooseコールが行われている間でも依然として処理された要求を表示します。したがって、私の結論は、1つの要求/応答オブジェクトは、任意の時点で高速で処理できるということです。 ' 'console.log(" a ");' 'res.send(" a ");' 'Card.findCards(function(err、結果は) ' ' console.log( "done"); ' '}) ' '}) ' – pauloadaoag