我试图创建一个高效的流node.js
应用程序,其中服务器将连接到MongoDB
与mongoose
中的stream
(上限集合),然后直接向客户端浏览器发出流。
我担心的是我的设计的可扩展性。让我知道,如果我错了,但似乎现在,对于每一个新的web浏览器打开,一个新的连接到MongoDB
也将被打开(它不会重用以前使用的连接),因此,如果我有很多用户连接在同一时间,将会有很多效率低下。我该如何改进呢?
我正在考虑在套接字中设计一个服务器-多个客户端类型。但我不知道如何做到这一点。
下面的代码:服务器端(app.js)
:
io.on('connection', function (socket) {
console.log("connected!");
var stream = Json.find().lean().tailable({ "awaitdata": true, numberOfRetries: Number.MAX_VALUE}).stream();
stream.on('data', function(doc){
socket.emit('rmc', doc);
}).on('error', function (error){
console.log(error);
}).on('close', function () {
console.log('closed');
});
});
客户端(index.html)
:
socket.on('rmc', function(json) {
doSomething(); // it just displays the data on the screen
});
不幸的是,这不仅仅取决于mongo的性能。除非你有很高的并发性(+1000个流),否则你不应该担心mongo(暂时)。
因为这种类型的应用程序有更大的问题,例如:数据类型和压缩,缓冲区溢出,带宽限制,套接字。IO限制,OS限制。这些是你最可能首先面对的问题。
现在我来回答你的问题。据我所知,你没有打开连接到mongo每个用户。用户连接到应用程序,而不是数据库。应用程序与数据库连接。最后,这些链接将帮助您理解和调整此类作业(流)的查询
https://github.com/Automattic/mongoose/issues/1248 https://codeandcodes.com/tag/mongoose-vs-mongodb-native/http://drewww.github.io/socket.io-benchmarking/