【发布时间】:2010-09-17 05:51:36
【问题描述】:
我正在使用 Java 开发一个 Web 应用程序,它通过 AJAX 调用从 servlet 获取数据。
此应用程序具有几个页面元素,它们以相当快的间隔从服务器获取新数据。
由于用户众多,对服务器的需求可能会相当高,所以我很好奇:
哪种方法性能最佳:
许多 servlet(每种类型的数据请求一个)?
或者:
一个可以处理所有请求的 servlet?
【问题讨论】:
我正在使用 Java 开发一个 Web 应用程序,它通过 AJAX 调用从 servlet 获取数据。
此应用程序具有几个页面元素,它们以相当快的间隔从服务器获取新数据。
由于用户众多,对服务器的需求可能会相当高,所以我很好奇:
哪种方法性能最佳:
许多 servlet(每种类型的数据请求一个)?
或者:
一个可以处理所有请求的 servlet?
【问题讨论】:
拥有多个 servlet 没有性能原因。在 Web 应用程序中,无论有多少请求,都只实例化一个 servlet 类的实例。请求不是序列化的,它们是并发处理的,因此您的 servlet 需要是线程安全的。
【讨论】:
struts framework 使用一个 servlet 处理应用程序中的所有内容。你的东西插入到那个 servlet 中。如果它对他们有用,它可能对你有用。
【讨论】:
就像 Tony 说的,真的没有理由使用多个 servlet,除非您需要分解一个复杂的 Java Servlet 类或者可能实现一个拦截过滤器。
【讨论】:
拥有多个服务的一个可能原因是,如果您需要扩展到多个服务器来处理未来的负载,那么将单独的服务移动到它自己的服务器上比在“幕后”进行更容易,如果一切都来自一项服务。
话虽如此,如果您有多个 servlet,则会产生额外的维护开销,因此需要平衡未来的灵活性和较低的可维护性。
【讨论】:
如果您使用多个 servlet,则不会有任何性能增强,因为每个 servlet 请求都在单独的线程中处理,前提是它不是单线程的。
但是保持代码的模块化和分离,您可以拥有多个 servlet。
【讨论】:
我相信你知道你可以拥有同一个 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
【讨论】: