【问题标题】:Execute long-running script on server from web browser从 Web 浏览器在服务器上执行长时间运行的脚本
【发布时间】:2015-03-05 20:40:13
【问题描述】:

我在 Linux 服务器上有项目构建脚本,它在 100 秒内执行 10 次操作。现在,我需要为项目的设计师和艺术家提供一种方法来运行该脚本,而他们的努力尽可能少(我认为最好的是http://ourproject.page 中的“构建”按钮)并能够跟踪构建过程(查看结果发生的每个操作)。

最好/最简单的实现方式是什么?

【问题讨论】:

  • 实现应该和您描述的一样简单:一个允许最终用户启动“构建”的页面,然后不断轮询服务器以提供有关任务完成的反馈。如果您有更多技术问题,您可能需要缩小问题的范围。
  • @ylabidi,轮询是跟踪脚本流程的唯一方法吗?我应该选择什么服务器端应用程序?什么最适合?我在哪里可以找到有关它的教程?我想,任何关于这些问题的答案都是断断续续的。附言构建脚本是用 Python 编写的,顺便说一句。
  • 它是什么,你的意思是“服务器端应用程序”?没有开箱即用的应用程序可以满足您的需求。如果通过应用程序您的意思是:技术堆栈、基于 python 的堆栈或基于 java 的堆栈,那么除非您有一些特定要求可以保证使用此堆栈而不是另一个,否则选择更多或不那么随意,由你决定。
  • 另外,轮询并不是向用户提供任务完成反馈的唯一方式。但在我看来,考虑到您的用例,最简单和最直接的方法(除了跟踪任务完成之外别无他法)。您还可以使用基于推送的方法,从服务器启动更新。在这里,库或框架的选择与您将用于开发应用程序的技术堆栈相关联。
  • 从未听说过技术栈 :)。 技术堆栈 更适合当前条件(脚本在 Python 上)。我在哪里可以找到polling 和/或push-based 教程?您能否将其作为正常答案回答,以便我标记它,好吗?

标签: web-services web build build-process remote-access


【解决方案1】:

既然你提到你的脚本是用python编写的,你感兴趣的基本上是一个关于如何在客户端和服务器之间实现简单反馈的例子,这是一个基于@987654322的simple implementation @ 网络框架。这个实现是在对类似于你的question 的回答中提出的。 如果你不熟悉flask,你可以在我上面链接的页面上找到教程。

【讨论】:

  • 我从这些链接中了解到,WebSocketspollingpush-based 复杂方法的现代替代品应该在今天使用,对吗?
  • 嗯,你可以使用websocket。但这意味着向您的应用程序添加至少 2 个其他依赖项客户端和服务器端。老实说,我不认为您拥有的用例保证了这种复杂性。
  • 所以 WebSockets 比通过维护 polling 和/或 push-based 方法来模拟它们更复杂吗?尚未深入研究这些主题,但至少两者的样本看起来都比 WebSockets ... 大一些
  • 我没有说 WebSocket 很复杂。复杂性源于您必须处理的库/技术的数量,以满足一组不需要如此复杂性的要求。
最近更新 更多