ste*_*425 4 child-process node.js
我已经建立了一个门户网站,其中一个页面列出了Octopus Deploy的版本.但是,每个版本所需的一些信息都保存在数据存储(共享驱动器)中的zip中.
我目前从Octopus的API获得版本,然后检查mongo db已经访问过的zip文件中存储的信息,所以我们只需要在第一次创建zip文件时读取一次.
目前所有这些逻辑都适用,但是当它第一次读取zip文件时它完全阻塞了.所以我把它放在一个运行良好的子进程中.
目前,每次用户点击发布页面时,所有这些的逻辑都会运行.如果章鱼部署的所有结果都在数据库中,那么它只返回那些结果.如果没有,它将返回结果,然后在子进程将数据库插入数据库后,使用socket io返回从zip文件读取的信息.
现在实际的问题/问题.如果用户A点击页面并从章节中获取不在数据库中的版本,则每次用户点击页面时它都会运行,它将启动子进程以读取zip.如果用户B在用户A的子进程完成之前命中页面,他们也将从不在数据库中的章鱼获得释放,因此将尝试命中子进程以执行与用户A相同的操作.但是因为代码到读取zip文件阻止它等待所有zip文件从用户A读取然后重复用户B的进程.
我如何检查子进程是否已经执行了zip读取,如果没有则执行则执行其他操作?
我尝试设置'inuse'变量并在尝试在子进程中以及在调用它的模块中执行read zips函数时进行检查.麻烦在于子进程中,zip读取函数阻止它,一旦完成将使用中的变量设置为false,因此排队的调用运行相同的事情.在模块中,每次用户加载页面时都会加载它,因此将其重置为默认值false,因此始终会调用read zip函数.
检查退出事件监听器. http://nodejs.org/api/child_process.html#child_process_event_exit
然后你将一些逻辑作为某种全局对象来维持状态.就像我们在启动子项时设置一个标志,并在ext事件触发时将其设置为off.