2012-09-11 38 views
8

Tôi cố gắng để sử dụng Node.js với MongoDB và làm theo tấm hướng dẫn tại http://howtonode.org/express-mongodbNode.js MongoDB đóng kết nối

mã để mở kết nối được

ArticleProvider = function(host, port) { 
this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {})); 
this.db.open(function(){}); 
}; 

Tuy nhiên tôi không thể nhìn thấy bất kỳ kết nối bị đóng cửa. Nhưng khi tôi nhìn thấy các bản ghi trên bảng điều khiển mongo, tôi có thể thấy đó là các kết nối mở và đóng sau một thời gian.

Kết nối có tự động đóng không? Nó sẽ là một vấn đề khi một số lượng lớn các khách hàng cố gắng truy cập vào máy chủ? Kết nối sẽ đóng ở đâu?

Cảm ơn

Tuco

Trả lời

6

Trong ứng dụng mẫu đó, chỉ một đối tượng ArticleProvider được tạo để ứng dụng chia sẻ khi yêu cầu phân phối. Phương thức khởi tạo của đối tượng đó sẽ mở một kết nối db sẽ không bị đóng cho đến khi ứng dụng chấm dứt (điều đó là tốt).

Vì vậy, những gì bạn sẽ thấy là bạn nhận được kết nối mongo mới mỗi khi bạn khởi động ứng dụng, nhưng không có kết nối bổ sung nào cho dù có bao nhiêu khách hàng truy cập máy chủ. Và ngay sau khi bạn chấm dứt ứng dụng của mình, bạn sẽ thấy kết nối của nó biến mất ở phía bên kia.

2

node-mongodb-native cung cấp một phương pháp chặt chẽ cho các đối tượng Db và bạn có thể đóng kết nối của bạn khi bạn kết thúc bằng cách gọi nó.

var that = this; 
this.db.open(function(){ 
    // do db work here 

    // close the connection 
    that.db.close(); 
}); 

Nếu bạn không đóng kết nối, vòng lặp sự kiện sẽ giữ kết nối mở và quy trình của bạn không thoát. Nếu bạn đang xây dựng một máy chủ web, nơi quá trình của bạn sẽ không bị chấm dứt, bạn không cần phải đóng kết nối.

Một tài liệu tham khảo tốt hơn cho node-mongodb-native có thể được tìm thấy trên https://github.com/mongodb/node-mongodb-native.

0

Hãy nhớ đặt db.close vào lần gọi lại cuối cùng được thực hiện để kết nối được mở cho đến khi tất cả các cuộc gọi lại kết thúc. Nếu không, báo cáo sẽ có lỗi như

/usr/local/lib/node_modules/mongodb/lib/utils.js:97 
    process.nextTick(function() { throw err; }); 
             ^
Error 
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17) 
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47) 
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17) 
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19) 
Các vấn đề liên quan