【问题标题】:Java, PHP or Python for web application?用于 Web 应用程序的 Java、PHP 或 Python?
【发布时间】:2025-12-15 04:40:01
【问题描述】:

我打算编写一个用于管理和标记照片的 Web 应用程序,我想就选择合适的平台/框架征求意见。

从用户的角度来看,该应用程序将非常简单,但是,我需要在后端做一些更复杂的事情:

  • 在单独的/后台线程中重新缩放和处理大量图像(不阻塞服务器/HTTP 响应),并有可能被另一个 HTTP 请求中断该线程
  • 访问 Amazon S3 存储,通过网络发送大文件(也在后台线程中)
  • 访问 PostgreSQL 并使用复杂且可能很慢的 SQL 查询

另外,我更喜欢一些轻量级的解决方案(越轻量级越好),速度不是那么重要,但我受到内存的限制 - 我将在只有 512 MB RAM 的 Linux 虚拟服务器上运行该应用程序。

我最擅长使用 Java,但我也可以使用 PHP 和 Python 编写代码。

您建议我使用哪个平台/框架?

【问题讨论】:

    标签: web-applications frameworks server-side


    【解决方案1】:

    这三个都可以。但是,PHP 是_专门_设计_用于编写 Web 应用程序的,因此您会发现针对 PHP 编写的用例而不是 Python 或 Java 编写的资源和教程要多得多。此外,请确保您运行的服务器支持您选择的技术,即 Java 的 servlet 容器或 PHP 的适当 Apache 模块。

    请注意,PHP 不支持线程,所有在线“PHP 线程”教程都是可怕的 hack。我通常使用 PHP 作为 UI 的后端,并在 PHP 或 Python 中从 cron 作业开始执行后台任务。获取 cron 作业的调度任务信息(无论是用 PHP 还是 Python 编写)的一个很好的解决方案是使用 php 将它们写入数据库:

    mysql_query("INSERT INTO PhotosToProcess ('time', 'tmp_name', 'resolution') VALUES (NOW(), 'someName', '640')");
    

    尽管 Python 支持线程,但我不喜欢从用于输出 UI (HTML) 的进程中生成新线程。

    【讨论】:

    • 好的,但是您认为我需要处理线程/后台作业吗?这是最重要的,我真的不知道这三个平台中哪个支持它们(我只是担心 PHP 不支持)。
    • “cron + 作业表”解决方案有时被称为“ghetto queues”,在中小型负载上效果很好。如果你每秒得到几个工作,那将是一个瓶颈;但是一旦您的系统具有正确的架构,就很容易用真正的队列管理器替换。
    • 谢谢,哈维尔。如果您知道 PHP 中真正的队列管理器,我很想听听。我查看了 Gearman、Rabbitmq 和一些 Zend Server Job Queue,但它们都是 hack,因为 PHP 缺少 damaen 和线程。
    • rabbitmq、zeromq、Redis 和许多其他都是非常真实的 MQ 替代品,它们都有 PHP 客户端。不需要线程,因为作业队列允许您将作业发送到外部进程。
    • 谢谢,下次我会看看那些产品。但是,必须同意,尽管他们有 PHP 客户端,但它们不是 PHP 解决方案。我不确定廉价的 PHP 托管解决方案是否会让您运行 C 或 C++。好吧,我刚刚检查了一下,Bluehost 让我编译和运行你好,世界,所以也许 C / C++ 应用程序在廉价主机上比我想象的更可行。