草庐IT

node.js - 在 mongodb 中存储来自 nodejs 的 settimeout id

coder 2023-11-06 原文

我正在使用 express 和 nodejs 运行一个网络应用程序。我有一个特定端点的请求,我在其中使用 settimeout 在不同的时间间隔后重复调用特定函数。

例如

router.get ("/playback", function(req, res) {
    // Define callback here ...
    ....

    var timeoutone = settimeout(callback, 1000);
    var timeouttwo = settimeout(callback, 2000);
    var timeoutthree = settimeout(callback, 3000);
});

settimeout 函数返回一个带有循环引用的对象。当试图将其保存到 mongodb 中时,出现 stack_overflow 错误。我的目标是能够将 settimeout 返回的这些对象保存到数据库中。

我有另一个名为取消播放的端点,调用它时,将检索这些超时对象并调用 cleartimeout 将它们作为参数传入。如何将这些超时对象保存到数据库中?或者有没有比将超时保存到数据库更好的清除超时的方法。在此先感谢您提供的任何帮助。

最佳答案

您不能在数据库中保存事件的 JavaScript 对象!也许您可以存储一个字符串或 JSON 或对它们的类​​似引用,但不能存储实际的对象,并且您以后无法重新加载它们。

编辑:此外,我刚刚注意到您正在使用 setTimeout 来重复内容。如果您需要定期重复,为什么不使用 setInterval 呢?

这是一个简单的解决方案,可以将索引保存在内存中:

var timeouts = {};
var index = 0;

// route to set the timeout somewhere
router.get('/playback', function(req, res) {
  timeouts['timeout-' + index] = setTimeout(ccb, 1000);
  storeIndexValueSomewhere(index)
  .then(function(){
    res.json({timeoutIndex: index});
    index++;
  });
}
// another route that gets timeout indexes from that mongodb somehow
req.get('/playback/indexes', handler);

// finally a delete route
router.delete('/playback/:index', function(req, res) {
  var index = 'timeout-' + req.params.index;
  if (!timeouts[index]) {
    return res.status(404).json({message: 'No job with that index'});
  } else {
    timeouts[index].cancelTimeout();
    timeouts[index] = undefined;
    return res.json({message: 'Removed job'});
  }
});

但这可能不会扩展到数百万个工作岗位。

一个更复杂的解决方案,也许更适合您的需求(取决于您的 playback 作业类型)可能涉及作业代理或消息队列、集群和订阅他们可以收听的内容的工作人员他们自己的工作取消信号等。

我希望这对您理清需求有所帮助。

关于node.js - 在 mongodb 中存储来自 nodejs 的 settimeout id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28579916/

有关node.js - 在 mongodb 中存储来自 nodejs 的 settimeout id的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  3. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

  4. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  5. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  6. ruby - 如何打印出 Mechanized 存储的 cookie? - 2

    我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject

  7. ruby-on-rails - 闪存消息存储在哪里? - 2

    我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf

  8. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  9. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  10. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

随机推荐