Java 基于servlet的堆栈是否有显著的开销?

Java 基于servlet的堆栈是否有显著的开销?,java,performance,http,servlets,client-server,Java,Performance,Http,Servlets,Client Server,我不知道这仅仅是因为页面加载需要一点时间,还是因为Servlet在HTTP的“裸机”之上有一个抽象框架,或者仅仅是因为Javee中的“企业”,但在我看来,与直接处理套接字的Java应用程序相比,基于servlet的应用程序本质上增加了开销 忘掉网页,想象一个Java服务器应用程序,你通过HTTP请求向它发送一个问题,它从内存中查找答案并在响应中返回答案。您可以很容易地编写一个基于Java套接字的应用程序来实现这一点,您还可以使用servlet方法来摆脱套接字的“裸机” 使用servlet而不是自

我不知道这仅仅是因为页面加载需要一点时间,还是因为Servlet在HTTP的“裸机”之上有一个抽象框架,或者仅仅是因为Javee中的“企业”,但在我看来,与直接处理套接字的Java应用程序相比,基于servlet的应用程序本质上增加了开销

忘掉网页,想象一个Java服务器应用程序,你通过HTTP请求向它发送一个问题,它从内存中查找答案并在响应中返回答案。您可以很容易地编写一个基于Java套接字的应用程序来实现这一点,您还可以使用servlet方法来摆脱套接字的“裸机”

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


是的,我不清楚HTTP请求中发送的确切数据,我知道这是一个模糊的问题。它实际上是关于servlet实现是否有很多间接层,或者其他任何会增加每次调用的显著开销的东西,这里的显著性是指可能额外增加0.1秒或更多。

当然有一些开销。很难定义的是多少,不是因为很难衡量,而是因为很难找到一个不带来更脆弱、充满bug和可扩展性差风险的替代方案

换句话说,假设你真的渴望表演。。。你会推出自己的服务器吗?它将如何处理管理并发请求(所有请求都到达同一端口)?您会为HTTP请求编写自己的解析器吗?它能在所有浏览器上正常工作吗?如何识别来自给定客户端的会话

换言之,您的问题有点像是在问“当相对于一个虚构的自定义数据存储进行度量时,关系数据库是否会引入大量的开销,虽然还没有人编写过该数据存储,但它会为了提高原始速度而删除所有不必要的特性?”

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



我强烈建议,如果您还没有,请看一看,特别是实现。

当然有一些开销。很难定义的是多少,不是因为很难衡量,而是因为很难找到一个不带来更脆弱、充满bug和可扩展性差风险的替代方案

换句话说,假设你真的渴望表演。。。你会推出自己的服务器吗?它将如何处理管理并发请求(所有请求都到达同一端口)?您会为HTTP请求编写自己的解析器吗?它能在所有浏览器上正常工作吗?如何识别来自给定客户端的会话

换言之,您的问题有点像是在问“当相对于一个虚构的自定义数据存储进行度量时,关系数据库是否会引入大量的开销,虽然还没有人编写过该数据存储,但它会为了提高原始速度而删除所有不必要的特性?”

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



我强烈建议,如果您还没有看到的话,请看一看,特别是实现。

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

从存在许多基于java的web应用程序这一事实来看,它的性能非常好


总之,别担心。您很可能会创建一个不如
javax.servlet
的最佳解决方案。性能问题主要来自糟糕的代码。

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

从存在许多基于java的web应用程序这一事实来看,它的性能非常好


总之,别担心。您很可能会创建一个不如
javax.servlet
的最佳解决方案。性能问题主要来自糟糕的代码。

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


即使是一个简单的servlet实现,也只需要客户端将http请求消息发送到服务器所需时间的一小部分。也就是说,开销是不可见的

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


即使是一个简单的servlet实现,也只需要客户端将http请求消息发送到服务器所需时间的一小部分。也就是说,开销是不可见的

在初始化servlet时必须执行的操作方面有一些开销。尽管这只在servlet接收到第一个请求时发生一次。

但在初始化servlet时必须执行的操作方面存在一些开销。尽管这只在servlet收到第一个请求时发生一次。

太模糊了。如果你没有测量它,它就不存在。对不起,这是一个愚蠢的回答。在设计多用户应用程序时,您必须预先考虑体系结构性能。关于“过早优化”的名言并不意味着你永远不应该在设计阶段进行优化。如果我写了一个关于这个主题的问题就好了…+1约翰。这个问题的字数比大多数问题都多,所以称之为“模糊”是完全错误的。从技术上讲,字数!=不含糊:)很多