2008-10-15 58 views
4

我正在研究Java中的Web应用程序,它通过AJAX调用从servlet获取数据。Java Servlets:性能

该应用程序具有几个页面元素,它们以相当快的速度从服务器获取新数据。

有了很多的用户,在服务器上的需求有潜力获得相当高的,所以我很好奇:

哪种方法提供最佳性能:

很多的servlet(一个用于每种类型的数据请求)?

或者:

一个servlet,它可以处理所有的请求?

回答

11

没有性能的原因有多个servlet。在Web应用程序中,无论有多少个请求,只有一个servlet类的实例被即时处理。请求不是序列化的,它们是并发处理的,因此需要您的servlet是线程安全的。

+0

谢谢,我从来没有什么低电平对servlet究竟发生了相当明显。 – 2008-10-15 12:16:56

2

struts framework在您的应用中使用了一个servlet。你的东西插入到一个servlet中。如果它适合他们,它可能会为你工作。

0

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

+0

1.你应该很少,如果有的话,将属性添加到ServletContext。 2.你可以支持这个:“多个servlet绝对是原始速度的方式”?这是不正确的,如果你需要同步某些东西,你将不得不同步你是否有1或100个servlet – 2008-10-15 03:29:50

+0

1.只说ServletContext不是线程安全的,没有关于良好的做法。来自“简明英汉词典”你对此绝对正确,对我而言,我会改变我的回答。我一直在想,我们可以通过多个小服务程序以小的方式避免线程阻塞。我的错。 – 2008-10-15 03:57:16

1

拥有多项服务的一个可能的原因是,如果您需要扩展到多个服务器来处理未来的负载,那么将单独的服务移到它自己的服务器上比在“幕后”执行它更容易,如果一切都从一项服务中退出。这就是说,如果你有多个servlet,会有额外的维护开销,所以这是一个兼顾未来灵活性和较低可维护性的问题。

1

如果您使用多个servlet,则没有性能增强,因为对于每个servlet请求都在单独的线程中处理,前提是它不是单线程的。但是保持模块化和代码分离,你可以有多个servlet。

0

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

除此之外,从我的理解中,您可能会受益于彗星建筑 - http://en.wikipedia.org/wiki/Comet_(programming)
在一些servlet容器上已经有了一些Comet的实现 - 下面看看如何使用Ajax和Comet - http://www.ibm.com/developerworks/java/library/j-jettydwr/。在决定你的架构之前,你应该学习。

BR,
〜一个