首页 文章

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

提问于
浏览
5

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

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

我的第一个问题是:多线程,它在Java的Web应用程序开发中使用的频率是多少?使用我的PHP应用程序,我的服务器可能需要对Facebook进行API调用以响应用户的请求(例如发布到用户的墙上) . 为了避免我的PHP进程在返回用户之前等待API调用完成,我使用Gearman作业排队服务器w / workers将工作从我的主应用程序服务器卸载到后台工作程序 .

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

1 回答

  • 2

    Java开发人员是否只是为了处理API调用而启动一个线程并让主进程返回给用户?

    这取决于 .

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


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

    最新版本的Java servlet规范增加了对异步处理的支持 . 我不能快速了解细节,但理论上这可以让你将请求线程与请求断开连接,而后者正在做一些需要很长时间的事情 . 但是,我不相信这会对此有所帮助...除非你有一个客户端实现的API,它同样能够使用一些小的(有限的)Java线程并行运行多个并发请求 .

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


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

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

相关问题