![](/img/trans.png)
[英]How are concurrent requests handled by Nodejs express http server?
[英]How mongodb connection works on concurrent requests in NodeJS express server?
我是mongoDB的新手,我目前正致力於使用Node express服務器進行設置。 我想知道如何使用mongoose驅動程序模塊管理對mongodb的並發請求以讀取集合數據。
例如:
如果一次有100個用戶訪問我的服務器( http://xxxxxx.com/showusers ),快遞服務器中的mongodb連接將如何工作? 它是單個連接還是分成100個連接,每個請求一個?
如何在操作后有效關閉mongodb中的連接對象? 或者我們可以將連接保留在快速服務器中,如下面的代碼所示?
以下是我的代碼..
var express = require('express');
var app = express();
app.set('port', config.port);
app.get('/users',storeusersapi.showUsers);
app.get('/storeUser',storeusersapi._insertUserDetails);
app.get('/findUser/:email',storeusersapi._findUser);
app.listen(app.get('port'),function(){
log.info('Express app started on port ' + app.get('port'));
});
var mongoose = require('mongoose');
var log = require('../config/logger');
// Mongoose connection to MongoDB (ted/ted is readonly)
mongoose.connect('mongodb://localhost/mydb', function (error) {
if (error) {
log.error("MongoDB Connection failure - " +error);
}else{
log.info('MongoDB is connected Successfully!!!');
}
});
// Mongoose Schema definition
var Schema = mongoose.Schema;
var UserSchema = new Schema({
first_name: String,
last_name: String,
email: String
});
// Mongoose Model definition
var User = mongoose.model('users', UserSchema);
exports.showUsers = function(req,res){
User.find({}, function (err, docs) {
res.json(docs);
});
};
exports._insertUserDetails = function(req,res){
var object = new User({first_name:'bob',last_name:'sel',email:'sel@xxxxx.com'});
object.save(function (err) {
if (err) {
log.error('Insertion error - '+ err);
}
else {
log.info("User Stored into database!!!");
}
});
};
exports._findUser = function(req,res){
User.find({ email: req.params.email }, function (err, docs) {
res.json(docs);
});
};
我已分別回答了你的兩個問題。
1.快遞服務器中的mongodb連接如何工作?
一旦建立到mongodb數據庫的連接。(使用mongoose或任何其他框架)它將創建一個連接池。 (Mongoose默認池大小為5,python中為100)創建的連接池由驅動程序維護,因此在需要與數據庫的連接時可以重新使用這些連接。
最佳做法是僅為整個應用程序創建一個新連接。 創建連接后,連接對象將用作單例。 使用mongoose模型連接到數據庫時,將從創建的連接池中分配單獨的連接。
如果您每次都要創建一個新連接那么它將導致連接流失。
2.如何在操作后有效關閉mongodb中的連接對象?
我不確定100%這個答案。 我的建議是在快速應用程序退出時斷開連接。
var db = mongoose.connect('mongodb://localhost:27017/database');
db.disconnect();
根據我的知識,你在代碼中所做的是正確的。 您只創建了一次新連接。 由於創建了連接池,因此您無需創建更多連接。
請仔細閱讀此鏈接,以便清楚地了解連接池及其使用方法。 https://dzone.com/articles/deep-dive-connection-pooling
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.