而Apache在web服务器上,更轻便、更快捷的web和应用程序服务器可能是托管高性能的基于web的应用程序的更好选择。它们专注于在有效利用系统有限资源的同时提供最大的性能。其中一个web服务器是码头,这是赢得球迷的嵌入性。
出于以下几个原因,企业需要在Apache之外寻找基于java的网站。首先,用Java构建的网站不仅需要一个web服务器,还需要一个servlet引擎来调用和运行呈现网站前端的Java servlet代码。其次,Apache不太适合托管现代web应用程序,这是因为它处理传入请求的方式。Apache和其他较老的web服务器会为每个请求生成一个新线程。然后,每个线程读取请求并调用生成页面的脚本。然后,它挂起等待脚本完成,并执行完成响应请求所需的任何其他任务和最终写操作。
这种模式不适合可以由数百或数千名用户同时访问网络应用程序。为了获得最佳的性能,Web服务器应该限制每个线程的内存开销,还可以使用多个线程来为每个请求服务。Web服务器就是这样做的被称为完全异步Web服务器。这种设计使它们足够有效的解决了传统C10K优化问题,也就是说它们可以处理10,000个并发连接。
较新的web服务器,例如lighttpd的,nginx的,切罗基族与可靠、占优势的同类产品相比,防波堤有许多优点。在这四家公司中,最受欢迎的是nginxNetcraft公司的2012年12月Web服务器调查比微软的互联网信息服务更强大的网站。然而,nginx通常更多地用于负载平衡其他应用程序或服务器,并提供静态内容,而不是作为一个独立的服务器。如果您是一名Java开发人员,并且在.war文件中有一个Java web应用程序,您不能直接使用nginx部署它。为此,您需要一个Java应用程序服务器,比如Jetty或Apache Tomcat。
Jetty和Tomcat
尽管您可以将两者都用作Java应用程序服务器,但Jetty提供了一些有趣的优势。您可以将其作为独立的应用程序服务器运行,也可以简单地将其嵌入到应用程序中,这是web开发人员非常流行的一种方法。
另外,虽然Tomcat一直在不断发展,以满足更新的web开发技术,但它没有跟上web开发人员现在构建应用程序的方式。这主要是因为servlet引擎在当今编写的许多Java应用程序中的作用降低了。与处理请求本身不同,在大多数现代web应用程序中,servlet仅用于将请求路由到诸如此类的呈现引擎谷歌网页工具包或模板引擎,如Freemarker。
许多web开发人员现在认为Tomcat太过了。它们不需要提供日志记录、连接池和其他服务的servlet引擎。相比之下,Jetty允许web开发人员将servlet引擎直接嵌入到他们的应用程序中。它在应用程序中充当服务,处理servlet响应和请求。
可以将Jetty看作是一组可以提供HTTP和servlet容器服务的软件组件。您可以插入其他组件并根据您的设置扩展服务器。事实上,谷歌应用程序引擎,它最初使用Tomcat作为web服务器,出于这个原因切换到Jetty。其他利用Jetty可嵌入特性的工具和框架包括Grails的,Eclipse,春分,费利克斯,连续体,JRuby,挂毯,茧, GWT。还有一个Jetty-Maven插件,这让开发者无需先组装它们的组件成一个.war文件中运行Web应用程序。
但是Jetty的可嵌入特性并不是使它成为Tomcat值得替代的唯一因素。开发人员Greg Wilkins表示,码头已被设计为有一个小的内存占用,从而使服务器可扩展性。据测试, Jetty可以很好地处理数万个HTTP连接和数十万个并发连接的WebSocket连接。Web服务器支持最新的标记语言,技术和协议的网站,包括CSS,AJAX,彗星、WebSocket、HTML5和SPDY。
Jetty的方法的一个明显的好处是,你可以使用,最终将托管的应用程序在同一台服务器开发的应用程序。此外,码头的设计充分考虑和执行的可扩展性有很多比更好的Tomcat在涉及与显著空闲时间多的连接情况。Tomcat的,而另一方面,执行最好的,而没有显著空闲时间处理请求。此外,码头有一个小的内存占用和被设计为使用新的I / O API,用于处理密集的I / O操作。这使得码头服务的可用存储任何用户量超过Tomcat的较大数量。当提供静态内容,码头采用先进的内存映射文件的缓冲区更快地交付他们没有吃东西了资源。
跑码头
你可以将Jetty嵌入到你的web应用程序中,你也可以使用它作为一个独立的服务器来测试你现有的Java web应用程序。要做到这一点,下载最新版本和提取归档在适当的位置,如/选择/码头。提取的目录将包含各种文件和目录,如斌/,其中包含shell脚本运行码头;等/,其容纳所有的配置文件;和lib /,里面有所有必需的JAR文件运行码头。另外,还要确保你有你跑码头前安装了Java。
到默认端口8080上启动码头,更改到/ opt /码头和类型java jar start.jar
。然后,您应该能够访问码头在http://本地主机:8080。
默认情况下,码头自动部署webapps /目录,其中启动包括一些测试应用程序,你现在应该可以从Web浏览器运行在任何的.war文件。如果你把一个.war文件的webapps /目录下,它是热部署到服务器。跟随详细的配置指南设置Jetty服务器的各个组件根据您的环境。如果您需要更多的帮助上手,有大量的使用防波堤的信息和文件在网上。
如果你是一个Java开发人员,码头给你很多的理由来超越Tomcat的。它有你在一个HTTP服务器和Java servlet容器所需要的一切。它支持最新的Java Servlet API和如SPDY协议更新。码头开发商正在通过积极参与Java社区进程(JCP)程序,甚至与互联网工程任务组(IETF)参与的新的互联网标准的制定。