我正在开发一个 Java 中的 Web 应用程序,它通过 AJAX 调用从 servlet 获取数据。
该应用程序具有几个页面元素,它们以相当快的间隔从服务器获取新数据。
有很多用户,对服务器的需求可能会变得相当高,所以我很好奇:
哪种方法提供最佳性能:
许多 servlet(每种类型的数据请求一个)?
或者:
一个可以处理所有请求的 servlet?
拥有多个 servlet 没有性能原因。在 Web 应用程序中,无论有多少请求,都只会实例化一个 servlet 类的实例。请求不是序列化的,它们是并发处理的,因此您的 servlet 需要是线程安全的。
struts 框架对应用程序中的所有内容都使用一个 servlet。你的东西插入到那个 servlet 中。如果它对他们有用,它可能对你有用。
拥有多个服务的一个可能原因是,如果您将来需要扩展到多个服务器来处理负载,那么将单独的服务移动到它自己的服务器上比在一切都在“幕后”进行更容易一项服务。
话虽如此,如果您有多个 servlet,则会有额外的维护开销,因此需要平衡未来的灵活性和较低的可维护性。
如果您使用多个 servlet,则没有性能增强,因为每个 servlet 请求都在单独的线程中处理,前提是它不是单线程的。
但是保持代码的模块化和分离,您可以拥有多个 servlet。
就像 Tony 说的那样,真的没有理由使用多个 servlet,除非您需要分解一个复杂的 Java Servlet 类或者可能实现一个拦截过滤器。
我相信您知道,只要您在 web.xml 文件中为您的应用程序注册不同的节点,您就可以拥有同一个 servlet 的多个实例——即,假设您想这样做。
除此之外,据我了解,您可能会从彗星架构中受益——http: //en.wikipedia.org/wiki/Comet_(programming)。
在一些 servlet 容器上已经有一些 Comet 的实现——这里看看如何使用 Ajax 和 Comet—— http://www.ibm.com/developerworks/java/library/j-jettydwr/。在决定你的架构之前,你应该学习。
BR,
~A