Node.js的长期任务

Node.js long term tasks

本文关键字:任务 js Node      更新时间:2023-09-26

我有一个node.js服务器,它正在从网络套接字到python套接字进行通信。当用户发送带有数据的异步ajax请求时,节点服务器将其传递给python,并将数据返回到服务器,然后从服务器返回到客户端。

当用户发送ajax请求时,就会出现问题:他必须等待响应,如果python进程花费了太多时间,那么ajax就已经超时了。

我尝试在node.js中创建一个套接字服务器,并在python中创建一台连接到套接字服务器的客户端,其中包含要处理的数据。节点服务器通过加载屏幕响应客户端。处理数据时,python套接字客户端连接到node.js套接字服务器并传递处理后的数据。但是,客户端不能请求处理后的数据,因为他不知道什么时候完成。

所以您有三个系统和一个异步请求。我最近用PHP和box.com API解决了这样一个问题。PHP不允许无限期地打开连接,所以我遇到了类似的问题。

为了解决这个问题,我会使用递归请求。它不是"实时"的,但这并不重要。

工作原理:

  1. 客户端浏览器向Node.js服务器发送"获取我的下载内容"请求。Node.js服务器向客户端浏览器返回一个唯一的请求id
  2. 客户端浏览器启动一个10秒的轮询,使用唯一的请求id来查看是否有任何更改。目前,答案是否定的
  3. Node.js服务器收到这个消息,并向Python服务器发送一个"Go get his download thing"请求。(客户端浏览器仍然每10秒轮询一次,答案仍然是否定的)
  4. python服务器实际上去获取他的下载内容,将其粘贴在一个地方,创建一个URL并将其返回到Node.js服务器。(客户端浏览器仍然每10秒轮询一次,答案仍然是否定的)
  5. Node.js服务器从Python服务器接收一条返回消息,其中包含该内容的URL。它根据开始时的请求id存储URL。此时,它的状态变为"是的,我有你的下载内容,就在这里!-URL)

  6. 客户端浏览器接收到带有URL的可爱数据包,现在停止轮询,然后愉快地跳到日落中。(或类似的更合适的数字响应)。

希望这能帮助你大致了解如何在不依赖推送技术的情况下解决这个问题。根据下载时间的长短,考虑调整你的投票间隔(我建议开始10秒)。你甚至可以变得棘手,等待30秒,然后每2秒轮询一次。根据你的问题进行微调。