4.1死循环法
最简单的自然是死循环法,如果使用观察者模式则可以进一步提高性能。
但是这种做法的缺点在于客户端请求了这个 servlet后, web 服务器会开启一个线程执行 servlet 的代码,而 servlet 由迟迟不肯结束,造成该线程也无法被释放。于是乎,一个客户端一个线程,当客户端数量增加时,服务器依然会承受很大的负担。
4.2改写web服务器
目前的趋势是从 web服务器内部入手,用 nio ( JDK 1.4 提出的 java.nio 包)改写 request/response 的实现,再利用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非 J2EE 官方技术的服务器有 Glassfish 和 Jetty 。
JDK 1.4版本 (包括之后的版本 ) 最显著的新特性就是增加了 NIO(New IO) ,能够以非阻塞的方式处理网络的请求,这就使得在 Java 中只需要少量的线程就能处理大量的并发请求了。
Jetty 6设计来处理大量并发连接,它使用Java语言的不堵塞I/O(java.nio)库并且使用优化的输出缓冲架构。Jetty也有一个处理长连接的杀手锏:一个称为Continuations的特性。
Grizzly作为 GlassFish中非常重要的一个项目,就是用 NIO 的技术来实现应用服务器中的高性能纯 Java 的 HTTP 引擎。 Grizzly 还是一个独立于 GlassFish 的框架结构,可以单独用来扩展和构建自己的服务器软件。
特点:使用 NIO不是一件简单的技术,它的一些特点使得编程的模型比原来阻塞的方式更为复杂。
4.3使用框架
基于 Java的成熟的服务器推送框架有 DWR 。
DWR是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个DWR servlet以及JavaScript库。虽然DWR不是Java平台上唯一可用的Ajax-RPC工具包,但是它是最成熟的,而且提供了许多有用的功能。从最简单的角度来说,DWR是一个引擎,可以把服务器端Java对象的方法公开给JavaScript代码。使用DWR可以有效地从应用程序代码中把Ajax的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet代码把Ajax请求调整成对Java域对象的调用。
DWR从 2.0开始增加了 push 功能 , 也就是在异步传输的情况下可以从 Web-Server 端发送数据到 Browser
一个简单的dwr推送程序
第一步 将dwr相关的jar包导入到工程
第二步 配置web.xml文件
第三步编写com.im.service.SendPushService类
第四步在dwr.xml文件定义向外暴露的接口
<allow>
<createcreator="new"javascript="SendPushService">
<paramname="class"value="com.im.service.SendPushService"/>
</create>
</allow>
第五步:编写jsp文件.
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-38623-3.html
首先得有
奥驴黔驴技穷
领空
你必须抱我美国人的大腿