gpt4 book ai didi

java - PHP 开发人员关于 Java for Web Development 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:33 26 4
gpt4 key购买 nike

我有多年使用 PHP 开发 Web 应用程序的经验,并且我还广泛使用 Java(但从未用于 Web 应用程序开发)。我正在完成一个大型项目,过去六个月我一直在从事该项目,该项目使用 PHP/CodeIgniter 构建并使用 CloudControl 托管(提供自动服务器配置和可扩展性)。

项目进展顺利,PHP 满足了我的需求 - 但现在我正处于开发面向企业用户的 Web 应用程序的开始阶段,我正在考虑使用 Java(可能是“Grails”)与 AWS Elastic Beanstalk 结合使用。

我的第一个问题是:多线程,它在 Java 网络应用程序开发中的使用频率是多少?对于我的 PHP 应用程序,我的服务器可能需要对 facebook 进行 API 调用以响应用户的请求(比如发帖到用户的墙上)。为了避免让我的 PHP 进程在返回给用户之前等待 API 调用完成,我使用带有工作程序的 Gearman 作业队列服务器将工作从我的主应用程序服务器卸载到后台工作程序。

Java 开发人员是否会简单地启动一个线程来处理 API 调用并将主进程返回给用户?这是 Java 开发相对于 PHP 的最大优势吗?谢谢!

最佳答案

Would a Java developer simply spin up a thread just to handle the API call and have the main process return to the user?

视情况而定。

如果你这样做,那么原始线程可以做一些其他事情,但除非它被设计为基于事件,否则它最终将需要等待辅助线程完成......然后你回来了你从哪里开始的。 (实际上你的情况更糟......因为你现在有 2 个线程在等待。)


在使用经典 Java servlet 实现的 Web 服务器的情况下,每个用户请求都在其自己的线程上运行。简单的方法是在请求线程上执行 API 调用。这会阻塞线程,但其他线程可以在进行时处理其他请求。假设您在 Web 容器的线程池中有足够的线程,这工作正常......尽管您最终会在线程堆栈上使用大量资源(内存)。

Java servlet 规范的最新版本增加了对异步处理的支持。我没有跟上细节的速度,但从理论上讲,这将允许您在请求执行需要很长时间的操作时断开请求线程与请求的连接。但是,我不相信这在这里会有帮助......除非你有一个 API 的客户端实现,它同样能够使用少量(且有界)的 Java 线程并行运行多个同时请求。

可能还有其他选择,但它们可能需要更多工作。


我的建议是从一个简单的解决方案开始。只需在请求线程上执行 API 调用,并将您的 Web 服务器配置为使用合理数量的请求线程。

很有可能您可以通过“浪费”一些内存来获得您实际需要的吞吐量。从长远来看,您可能需要解决这个问题,但到那时您将有时间了解更多关于更具可扩展性的替代方案。

关于java - PHP 开发人员关于 Java for Web Development 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com