基于servlet的堆栈是否有很大的开销?

时间:2010-06-05 18:50:57

标签: java performance http servlets client-server

我不知道是否仅仅是因为页面加载需要一点时间,或者servlet的方式是在HTTP的“裸机”之上有一个抽象框架,或者只是因为Jave-EE中的“Enterprise”,但在我看来,我认为基于servlet的应用程序本身就会增加开销,而Java应用程序只是直接处理套接字。

忘记网页,想象一下Java服务器应用程序,你通过HTTP请求向它发送一个问题,它从内存中查找答案并在响应中返回答案。您可以轻松编写一个基于Java套接字的应用程序来执行此操作,您也可以执行servlet方法并远离套接字的“裸机”。

使用Servlet而不是基于套接字的自定义HTTP侦听应用程序实现相同的方法是否会产生任何可衡量的性能影响?

是的,我对HTTP请求中发送的确切数据感到朦胧,我知道这是一个模糊的问题。它实际上是关于servlet实现是否具有大量间接层或其他任何会增加每次调用的显着开销的内容,其中显着的意思是可能额外增加0.1或更多。

4 个答案:

答案 0 :(得分:2)

当然,每次抽象都会增加开销。

从存在许多基于Java的Web应用程序这一事实来看,它在性能方面非常好。

总之 - 不要担心。您可能会创建一个比javax.servlet更不理想的解决方案。性能问题主要来自糟糕的代码。

答案 1 :(得分:1)

当然有一些开销。难以定义的是多少,不是因为它难以衡量,而是因为很难找到一种不会引入更脆弱,错误和可扩展性差的风险的替代方案。

换句话说,假设你真的为性能而死...你会推出自己的服务器吗?它将如何处理并发请求(所有命中同一端口)?你会为HTTP请求编写自己的解析器吗?它是否能够与所有浏览器一起正常工作?您如何识别来自特定客户的会话?

换句话说,你的问题有点像是在问“关系数据库是否在假想的自定义数据存储区进行测量时会产生很大的开销,而这个数据存储区还没有人写过,但这会削减所有不必要的功能以支持原始速度?” / p>

我的回答:是的,当然。我仍然会使用数据库,因为它现在可以使用,并且已经针对开发人员认为理所当然的许多事情进行了调整,但是每次发现需要它们用于应用程序时,重新发送效率都非常低。


如果您还没有,我强烈建议您查看Jetty,特别是WebSockets实施。

答案 2 :(得分:0)

我认为不会有太多开销。 HTTP消息非常小,解析起来非常简单。 Servlet体系结构对裸骨http消息没有很多抽象。

即使是一个天真的servlet实现也应该只花费客户端将http请求消息发送到服务器所花费的时间的一小部分。也就是说,开销是不明显的。

答案 3 :(得分:0)

在初始化servlet方面需要做些什么开销。虽然这只在servlet收到第一个请求时发生一次。