Java Servlet:性能
Posted
技术标签:
【中文标题】Java Servlet:性能【英文标题】:Java Servlets: Performance 【发布时间】:2010-09-17 05:51:36 【问题描述】:我正在使用 Java 开发一个 Web 应用程序,它通过 AJAX 调用从 servlet 获取数据。
此应用程序具有几个页面元素,它们以相当快的间隔从服务器获取新数据。
由于用户众多,对服务器的需求可能会相当高,所以我很好奇:
哪种方法性能最佳:
许多 servlet(每种类型的数据请求一个)?
或者:
一个可以处理所有请求的 servlet?
【问题讨论】:
【参考方案1】:拥有多个 servlet 没有性能原因。在 Web 应用程序中,无论有多少请求,都只实例化一个 servlet 类的实例。请求不是序列化的,它们是并发处理的,因此您的 servlet 需要是线程安全的。
【讨论】:
谢谢,我一直不太清楚 servlet 底层到底发生了什么。【参考方案2】:struts framework 使用一个 servlet 处理应用程序中的所有内容。你的东西插入到那个 servlet 中。如果它对他们有用,它可能对你有用。
【讨论】:
【参考方案3】:就像 Tony 说的,真的没有理由使用多个 servlet,除非您需要分解一个复杂的 Java Servlet 类或者可能实现一个拦截过滤器。
【讨论】:
1.您应该很少(如果有的话)向 ServletContext 添加属性。 2. 你能支持一下:“多个 servlet 绝对是提高原始速度的方法”吗?这根本不正确,如果您需要同步某些东西,无论您有 1 个还是 100 个 servlet,您都必须同步 1.只是说 ServletContext 不是线程安全的,也没有什么好的做法。 2. 你说的完全正确,我的脑子放屁,我会改变我的答案。我在想,我们可以通过多个 servlet 以某种小方式避免线程阻塞。我的错。【参考方案4】:拥有多个服务的一个可能原因是,如果您需要扩展到多个服务器来处理未来的负载,那么将单独的服务移动到它自己的服务器上比在“幕后”进行更容易,如果一切都来自一项服务。
话虽如此,如果您有多个 servlet,则会产生额外的维护开销,因此需要平衡未来的灵活性和较低的可维护性。
【讨论】:
很遗憾,问的问题是关于Ajax请求的,所以服务器必须与页面加载的地方相同。公认的执行您建议的方法是在多个服务器前面使用负载均衡器,所有服务器都提供相同的内容(即都有相同的 servlet)【参考方案5】:如果您使用多个 servlet,则不会有任何性能增强,因为每个 servlet 请求都在单独的线程中处理,前提是它不是单线程的。
但是保持代码的模块化和分离,您可以拥有多个 servlet。
【讨论】:
【参考方案6】:我相信你知道你可以拥有同一个 servlet 的多个实例,只要你在 web.xml 文件中为你的应用注册不同的节点——也就是说,假设你想这样做。
除此之外,据我了解,您可能会从彗星架构中受益——http://en.wikipedia.org/wiki/Comet_(programming)。 在一些 servlet 容器上已经有一些 Comet 的实现——这里是如何使用 Ajax 和 Comet——http://www.ibm.com/developerworks/java/library/j-jettydwr/。在决定您的架构之前,您应该进行研究。
BR, ~A
【讨论】:
以上是关于Java Servlet:性能的主要内容,如果未能解决你的问题,请参考以下文章