【问题标题】:Advice on which language to use关于使用哪种语言的建议
【发布时间】:2011-04-24 07:09:04
【问题描述】:

我正在尝试创建一个将从系统获取输入的 Web 应用程序。

这个应用程序应该做的是监听一些 shell 脚本执行时发生的情况,并通过 web 报告状态。

一个例子:

  • 我正在使用 shell 脚本复制数千条记录,虽然这仍在执行,但我想将脚本的当前状态传递给 Web 界面。在 shell 脚本方面,我可以回显类似“正在复制文件,请等待它完成”。

从 shell 端使用哪种编程语言将其传递到 Web 界面是最简单的方法?我打算将 JSP/JAVA 用于 web。

这甚至是正确的思考方式吗?欢迎提出任何建议

编辑

http://nodejs.org/ 这样的东西对此有用吗?

【问题讨论】:

    标签: java python perl shell system


    【解决方案1】:

    我会改用命名管道 (FIFO)。您只需将输出写入管道并让应用程序读取它。我不确定是否有任何其他方法可以获得比这更活跃的系统。

    我推荐 Perl 作为后端。

    编辑:

    命名管道是 UNIX 上的一种特殊类型的文件。缩写 FIFO 代表“先进先出”。在 LINUX Journal 你可以找到一个有趣的read about named pipes

    Perl 是一种非常强大的脚本语言,其中包含许多现成的模块,您可以在 http://cpan.org 上找到这些模块。您可以在 SO 上找到一些关于如何/从何处开始学习 Perl 的答案here

    【讨论】:

    • 我对perl没有经验,我愿意学习,你能澄清一下你的答案吗?也许提供一些链接
    【解决方案2】:

    如果我正确理解您的问题,您希望在客户端计算机上显示一个网页,该网页报告服务器计算机上长时间运行的任务的状态。如果是这种情况,那么您需要关注称为 AJAX IMO 的东西。

    对于我所知道的最简单、最容易理解的 AJAX 实现来说,Apache Wicket 是值得的。

    【讨论】:

      【解决方案3】:

      写入日志文件将是最简单的解决方案。而在编程中,简单往往意味着好的。

      如果您真的需要非常快速/实时的系统,您可能应该将这些日志作为数据库。

      至于语言,使用你最喜欢的。他们都支持SQLite,包括bash。

      【讨论】:

        【解决方案4】:

        您的应用程序的 Web 部分可以轻松读取文件或数据库,因此您只需确保您的 shell 脚本正在输出一些内容以供 Java 代码更新。

        例如,如果你像这样运行你的 shell 脚本

        ./myscript.sh > mylog.log
        

        然后在你的 Java 代码中(注意你的 JSP 中不应该有逻辑),你可以读入文件以确定更新的状态,并将结果输出到你的 JSP。

        从数据库中读取数据会更好,但这需要您更改 shell 脚本以将数据输出到数据库。

        【讨论】:

        • 我希望脚本更新尽可能实时,不知道我将如何处理日志,我怎么知道脚本是否已经转移到下一件事,我应该阅读日志文件每隔几秒?
        • 我会这样做。如果您希望脚本将数据推送到网页,那么您可以在服务器上运行一个 Java 程序来检查日志文件的更新,然后向您的 Web 应用程序发送请求(Web 服务请求、套接字请求或甚至更新数据库并让您的服务器定期轮询数据库)通知它更改
        • 现在点+1,谢谢你的回答我会看看其他人在说什么。
        【解决方案5】:

        您可以将 shell 脚本输出放到服务器上的某个存储中。并在网页上使用 AJAX 轮询服务器并从该存储中获取更新到页面。

        如果您决定使用 JSF 创建网页,我可以推荐来自 ajax2jsf 库的“a4j:poll”组件。它非常简单明了。从网页轮询服务器的非常简单的方法。

        【讨论】:

        • 我怎么知道服务器上的存储是否发生了变化,我需要将另一个信息传递给前端,每隔几秒发送一次 ajax 请求?我想让它尽可能生动
        • @London,是的,您可以每隔几秒以您需要的频率发送 AJAX 请求。
        • 这不会重新加载整个页面。只有页面的一部分会被 Ajax 持续更新
        猜你喜欢
        • 2015-08-30
        • 2011-09-07
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        • 2018-04-13
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多