Java Servlets:性能

4
我正在开发一款Java Web应用程序,通过AJAX调用从Servlet获取数据。
该应用程序具有多个页面元素,以相当快的间隔从服务器获取新数据。
对于大量用户,服务器的需求潜力可能会相当高,因此我很好奇:
哪种方法提供了最佳性能:
许多Servlet(每种数据请求一个Servlet)?
还是:
一个可以处理所有请求的单个Servlet?
6个回答

11

拥有多个servlet没有性能上的必要。在web应用程序中,只会实例化一个servlet类,而不管有多少请求。请求不是串行处理的,它们是并发处理的,因此您的servlet需要是线程安全的。


谢谢,我从未完全明白servlet在低级别上具体发生了什么。 - TM.

2

Struts框架使用一个servlet来处理您应用程序中的所有内容。 您的内容将插入到该servlet中。 如果它适用于他们,那么它可能也适用于您。


1

拥有多个服务的一个可能原因是,如果您需要在未来扩展到多个服务器以处理负载,将单独的服务移动到自己的服务器比在一项服务中进行“幕后”操作更容易。

话虽如此,如果您有多个servlet,则存在额外的维护开销,因此需要权衡未来的灵活性和较低的可维护性。


不幸的是,问题涉及到Ajax请求,因此服务器必须与加载页面的服务器相同。您建议的确认方法是在多个服务器前面放置负载均衡器,所有这些服务器都提供相同的内容(即所有服务器都具有相同的servlet)。 - Tony BenBrahim

1

如果您使用多个servlet,则没有性能增强,因为对于每个servlet请求都在单独的线程中处理,前提是它不是单线程的。

但是,保持代码的模块化和分离,您可以拥有多个servlet。


0

就像Tony所说的那样,除非你需要拆分一个复杂的Java Servlet类或者实现一个拦截过滤器,否则没有理由使用多个servlet。


  1. 你应该很少甚至不要向ServletContext添加属性。
  2. 你能证明这个观点吗:“对于原始速度来说,多个servlet绝对是正确的选择”?这显然是不正确的。如果你需要在某些东西上进行同步,无论你有一个还是100个servlet,你都必须进行同步。
- Tony BenBrahim
  1. 仅仅说ServletContext不是线程安全的,没有提及好的实践方法。
  2. 在这方面你绝对是正确的,我犯了个愚蠢的错误,我将改变我的回答。我一直在想我们可能可以通过多个servlet在某种程度上避免线程阻塞,这是我的错。
- Eric Wendelin

0

我相信你知道只要在web.xml文件中为应用程序注册不同的<servlet>节点,就可以拥有多个相同servlet的实例 -- 假设你想这样做。

除此之外,根据我的理解,你可能会从Comet架构中受益 -- http://en.wikipedia.org/wiki/Comet_(programming)
一些Servlet容器已经实现了Comet -- 这里是一个使用Ajax和Comet的例子 -- http://www.ibm.com/developerworks/java/library/j-jettydwr/。在决定你的架构之前,你应该先学习一下。

敬礼,
~A


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接