有效的套接字.io分布与Mongoose流



我试图创建一个高效的流node.js应用程序,其中服务器将连接到MongoDBmongoose中的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/

相关内容

  • 没有找到相关文章

最新更新