Node.js长期任务

时间:2016-03-27 11:46:16

标签: javascript python ajax node.js sockets

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

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

我尝试在node.js中创建一个套接字服务器,并在python中使用要处理的数据连接到套接字服务器。节点服务器使用加载屏幕响应客户端。处理数据时,python套接字客户端连接到node.js套接字服务器并传递处理过的数据。但是,客户端无法请求已处理的数据,因为他不知道何时完成。

1 个答案:

答案 0 :(得分:0)

所以你有三个系统和一个异步请求。我最近使用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的可爱数据包,立即停止轮询,并快乐地跳到夕阳中。 (或类似的更合适的数字回应)。

  7. 希望这有助于您大致了解如何在不依赖推送技术的情况下解决此问题。考虑调整轮询间隔(我建议启动10秒),具体取决于下载时间。你甚至可能变得棘手,等待30秒,然后每2秒轮询一次。根据你的问题进行微调。