快速业务通道

Servlet API和NIO: 最终组合在一起 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
J2EE Servlet API 中期望的相似。当对 servlet 的调用返回时,工作线程在返回到池中之前,会检查是否有来自相同客户机的另一个请求可用。注意,这里用到了单词 池 (pool)。事实上,线程会对队列尝试另一个 remove() 调用,并变成阻塞,直到下一个请求可用。

运行示例

示例服务器实现了 HTTP 1.1 协议的一个子集。它处理普通的 HTTP get 请求。它带有两个命令行参数。第一个指定端口号,第二个指定 HTML 文件所驻留的目录。在解压文件后, 切换到项目目录,然后执行下面的命令,注意要把下面的 webroot 目录替换为您自己的目录:

java -cp bin org.sse.server.Start 8080 "C:\mywebroot"

还请注意,服务器并没有实现目录清单,因此必须指定有效的 URL 来指向您的 webroot 目录下的文件。

Servlet API和NIO: 最终组合在一起(4)

时间:2011-01-26 IBM Taylor Cowan

性能结果

示例 NIO 服务器是在重负载下与 Tomcat 5.0 进行比较的。选择 Tomcat 是因为它是基于标准 Java I/O 的纯 Java 解决方案。为了提高可伸缩性,一些高级的应用程序服务器是用 JNI 本机代码优化的,因此它们没有提供标准 I/O 和 NIO 之间的很好比较。目标是要确定 NIO 是否给出了大量的性能优势,以及是在什么条件下给出的。

如下是一些说明:

Tomcat 是用最大的线程数量 2000 来配置的,而示例服务器只允许用 4 个工作线程运行。

每个服务器是针对相同的一组简单 HTTP get 测试的,这些 HTTP get 基本上由文本内容组成。

把加载工具(Microsoft Web Application Stress Tool)设置为使用“Keep-Alive”会话,导致了大约要为每个用户分配一个 socket。然后它导致了在 Tomcat 上为每个用户分配一个线程,而 NIO 服务器用固定数量的线程来处理相同的负载。

图 2 展示了在不断增加负载下的“请求/秒”率。在 200 个用户时,性能是相似的。但当用户数量超过 600 时,Tomcat 的性能开始急剧下降。这最有可能是由于在这么多的线程间切换上下文的开销而导致的。相反,基于 NIO 的服务器的性能则以线性方式下降。记住,Tomcat 必须为每个用户分配一个线程,而 NIO 服务器只配置有 4 个工作线程。

图 2. 请求/秒

图 3 进一步显示了 NIO 的性能。它展示了操作的 Socket 连接错误数/分钟。同样,在大约 600 个用户时,Tomcat 的性能急剧下降,而基于 NIO 的服务器的错误率保持相对较低。

图 3. Socket 连接错误数/分钟

结束语

在本文中您已经学习了,实际上可以使用 NIO 编写基于 Servlet 的 Web 服务器,甚至可以启用它的非阻塞特性。对于企业开发人员来说,这是好消息,因为在企业环境中,NIO 比标准 Java I/O 更能够进行伸缩。不像标准的 Java I/O,NIO 可以用固定数量的线程处理许多客户机。当基于 Servlet 的 NIO Web 服务器用来处理保持和拥有 socket 连接的客户机时,会获得更好的性能。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号