草庐IT

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

coder 2024-04-07 原文

我有多年使用 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/

有关java - PHP 开发人员关于 Java for Web Development 的问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  8. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  9. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  10. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

随机推荐