Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点中MongoDB的连续轮询效率_Node.js_Mongodb_Sockets_Redis_Socket.io - Fatal编程技术网

Node.js 节点中MongoDB的连续轮询效率

Node.js 节点中MongoDB的连续轮询效率,node.js,mongodb,sockets,redis,socket.io,Node.js,Mongodb,Sockets,Redis,Socket.io,我需要根据数据库更改不断更新客户机上的数据。我正在考虑使用一个5秒间隔函数,该函数反复收集所有数据库信息,并使用Socket.IO将数据发送到客户端 目前,我在没有socket.io的情况下在客户机本身上执行此操作,只是重复对服务器执行REST调用,然后服务器处理数据 我的问题是:这些方法是有效的还是低效的?有没有更好的解决方案来解决我想要实现的目标?我需要更多的细节来确定,但这听起来不是一个好的解决方案 如果您需要的数据没有快速变化,比如说几秒钟,那么您的每个连接仍然每5秒钟轮询一次,这是一种

我需要根据数据库更改不断更新客户机上的数据。我正在考虑使用一个5秒间隔函数,该函数反复收集所有数据库信息,并使用Socket.IO将数据发送到客户端

目前,我在没有socket.io的情况下在客户机本身上执行此操作,只是重复对服务器执行REST调用,然后服务器处理数据


我的问题是:这些方法是有效的还是低效的?有没有更好的解决方案来解决我想要实现的目标?

我需要更多的细节来确定,但这听起来不是一个好的解决方案

如果您需要的数据没有快速变化,比如说几秒钟,那么您的每个连接仍然每5秒钟轮询一次,这是一种浪费

在这种情况下,您可能只是触发一个数据发生更改的事件,然后您可以通过活动的套接字推送消息。

Ryan,您可以尝试使用它在每次对集合进行更新时触发事件。不过,您需要在套接字连接事件中执行此操作,它才能正常工作。大致如下:

io.sockets.on('connection', function(socket) {
  // when the socket is connected, start listening to MongoDB
  const MongoClient = require("mongodb").MongoClient;
  MongoClient.connect("mongodb://192.168.1.201")
    .then(client => {
      console.log("Connected correctly to server");
      // specify db and collections
      const db = client.db("your_db");
      const collection = db.collection("your_collection");
      const changeStream = collection.watch();
      // start listening to changes
      changeStream.on("change", function(change) {
        console.log(change);
        // this is where you can fire the socket.emit('the_change', change)
      });
    })
    .catch(err => {
      console.error(err);
  });
});
请注意,使用此方法需要您设置一个。您可以按照这些说明操作,或者使用

考虑和sockiet.io,如果它适合您的应用程序。