【问题标题】:Node.js long term tasksNode.js 长期任务
【发布时间】:2016-07-14 19:15:25
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么需要同时使用python和node.js? python 服务到底在做什么?
  • 顺便说一句,你的问题还不错。我们已经对其进行了编辑以帮助您。欢迎来到堆栈溢出:)
  • @timOgilvy 感谢您的帮助。我现在不能谈论 python 服务,但这是必要的。主要目标是客户端提交一个表单,然后他从 python 服务返回数据进行显示。
  • 您在看websockets,这是一个合乎逻辑的解决方案,您是否也看过长轮询? python服务器返回什么格式?为什么node.js客户端不知道python请求是否不完整
  • @timOgilvy 我想我把它弄复杂了。我搜索了很长一段时间的解决方案。 python的任务是下载数据并返回数据存储的路径。客户不需要了解python。我的意思是我试图发出一个 get 请求来启动 nodejs 套接字服务器只是为了取回数据,但请求超时。我正在使用 tcp 套接字

标签: javascript python ajax node.js sockets


【解决方案1】:

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

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

这是如何工作的:

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

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

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

【讨论】:

  • 您可以将轮询与保持打开状态的请求结合起来,例如使用带有重复请求的“失败功能”的 jquery ajax 请求,这样如果响应是“请求”超时'它会再次发生。
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多