【问题标题】:Efficient Socket.io distribution with Mongoose stream使用 Mongoose 流的高效 Socket.io 分发
【发布时间】:2016-10-28 23:43:22
【问题描述】:

我正在尝试创建一个高效的流式node.js 应用程序,其中服务器将使用mongoose 连接到MongoDB 中的stream(封顶集合),然后将流直接发送到客户端浏览器.

我担心的是我的设计的可扩展性。如果我错了,请告诉我,但似乎现在,对于打开的每个新 Web 浏览器,也会打开一个到 MongoDB 的新连接(它不会重新使用以前使用的连接),因此,如果我同时连接了很多用户,那么效率会很低。我该如何改进呢?

我正在考虑在 socket.io 中使用单服务器 - 多客户端类型的设计,但我不知道如何实现。

代码如下:

服务器端(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
});

【问题讨论】:

    标签: node.js mongodb socket.io stream


    【解决方案1】:

    不幸的是,这不仅仅取决于 mongo 的性能。除非您有高水平的并发性(+1000 个流),否则您不应该担心 mongo(目前)。

    因为这种应用程序会遇到更大的问题,例如:数据类型和压缩、缓冲区溢出、带宽限制、socket.io 限制、操作系统限制。这些是您最有可能首先面临的问题。

    现在回答你的问题。据我所知,不,您没有为每个用户打开与 mongo 的连接。用户连接到应用程序而不是数据库。该应用程序已与数据库连接。

    最后,这些链接将帮助您了解和调整您对此类工作(流式传输)的查询

    https://github.com/Automattic/mongoose/issues/1248

    https://codeandcodes.com/tag/mongoose-vs-mongodb-native/

    http://drewww.github.io/socket.io-benchmarking/

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 1970-01-01
      • 2011-01-24
      • 2011-10-16
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多