Java、PHP还是Python用于Web应用程序?

5

我将要编写一个用于管理和标记照片的网络应用程序,我想请教一下在选择合适的平台/框架方面有什么建议。

从用户的角度来看,该应用程序非常简单,但是在后端方面需要一些更复杂的东西:

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

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

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

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

1个回答

2
所有三种语言都可以使用。不过,PHP是专门设计用于编写网络应用程序的语言,因此你会发现有更多的资源和针对PHP编写的教程,相比Python或Java。此外,请确保你所运行的服务器支持你选择的技术,例如Java需要一个servlet容器,而PHP需要相应的Apache模块。
请注意,PHP不支持线程,所有在线上的“PHP线程”教程都是糟糕的黑客方法。我通常使用PHP作为UI的后端,并使用PHP或Python在cron作业中启动背景任务。一个好的解决方案是将计划任务的信息(无论是使用PHP还是Python编写)写入数据库中以便于cron作业调度。
mysql_query("INSERT INTO PhotosToProcess ('time', 'tmp_name', 'resolution') VALUES (NOW(), 'someName', '640')");

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


好的,但是你考虑过我需要使用线程/后台作业吗?这是最重要的事情,我不知道这三个平台中哪一个支持它们(我只是担心PHP不支持)。 - Martin Majer
“cron + jobs table”解决方案有时被称为“贫民队列”,在小到中等负载下运行良好。如果每秒钟有多个作业,它将成为瓶颈;但一旦您的系统具备了正确的架构,很容易用真正的队列管理器替换它。 - Javier
谢谢,哈维尔。如果你知道PHP中的真正队列管理器,我很想了解一下。我已经看过Gearman、Rabbitmq和一些Zend Server Job Queue,但它们都是hack,因为PHP缺乏守护进程和线程。 - dotancohen
rabbitmq、zeromq、Redis等都是非常实用的MQ(消息队列)替代品,它们都有PHP客户端。不需要使用线程,因为作业队列可以让您将作业发送到外部进程。 - Javier
谢谢,我下次会看看那些产品。然而,必须承认,尽管它们有PHP客户端,但它们并不是PHP解决方案。我不确定廉价的PHP托管解决方案是否允许运行C或C ++。好吧,我刚刚检查了一下,Bluehost让我编译和运行hello,world,所以也许在廉价托管上运行C / C ++应用程序比我想象的更可行。 - dotancohen
如果它们允许设置cron作业,那么可以使用低端队列。在你需要真正的队列管理器之前,你会长时间地超越任何廉价的PHP主机。但是,如果有一些廉价的PHP主机提供已经工作的队列管理器服务,这也不会让我惊讶。这类似于Amazon的SQS(简单队列服务)。 - Javier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接