寻找有关如何执行以下操作的一些建议:
1,2和3都没问题。我只是觉得将排队任务的结果传递回后端很棘手,以便它可以关闭请求。
从网站进行轮询不是一个选项 - 无论处理任务多长时间,请求都必须保持打开状态。我正在使用nodejs。
答案 0 :(得分:1)
2 - 4都在服务器端发生。没有什么可以阻止您轮询结果的预期结果位置(在服务器端),然后在最终显示时返回结果。
如果作业完成后可以执行URL,则可以获得更高效的代码。在这种情况下,您的服务将有两个端点...一个用于客户端启动进程,另一个用于您的作业队列可以调用。
服务器启动作业...将响应回调保存在全局对象中,以便它不会被关闭(我假设这里有类似的表达式)
openJobs.push({id:12345,res:res}); jobQueue.execute({id:12345,data:{...}});
当作业完成并保存结果时,请使用id
完成原始回复
openJob.res.send(数据);
这将发送数据并关闭原始客户端 - 服务器连接。
总体结果是你根本就没有轮询......这很酷。
当然......在上述任何一种情况下,如果您的服务器在批处理中间关闭,您就会被搞砸......这就是为什么我会在这种情况下推荐类似socket.io的东西。您可以将作业的结果排在某处,而socket.io将轮询/等待列表上的回调,并在有新项目时推送到客户端。这样做更好,因为如果服务器崩溃没什么大不了的话 - 一旦服务器重新启动,客户端就会重新连接。