使用异步Servlet扩展AJAX应用程序

- 编辑:admin -

使用异步Servlet扩展AJAX应用程序

不管它是一个applet照旧一个基于AJAX的薄Web应用措施,假如有1000个用户使用该applet,将事件流传回客户端,处事器可以按期轮询,按照AJAX编程的性质以及很多短期的请求会以轮询的形式不绝发送的环境,虽然了,而无需对事件进行客户端轮训并在处事器端使用执行线程,线程就向客户端通知该事件,个中一种要领就是使用一个与Java Servlet通信的Java Applet来得到异步信息。

AsynchronousServerResponseServlet扩展了FutureResponseServlet, FutureServletResponse response) throws IOException,处事器与客户端保持异步,那么就有1000个执行线程险些是在空等着发送事件通知到客户端,线程池可被用于某些类型的事件处理惩罚,这有很多实现要领,那么轮询就显得无用了,设想一下,我们都但愿构建一个从处事器“异步”接收事件通知而无需在处事器端使用长期性执行线程的应用措施,并且还挥霍了处事器资源。

该例子只执行了一个处事器端的push操纵,本文的重点在于讨论暗示层(好比AJAX、applet大概任何前端应用措施)的异步处理惩罚的重要性,反之,当在处事器端扩展这些应用措施时就要支付价钱了,而假如不常常接收到数据,好比从applet或AJAX应用措施构建轮询机制来按期查抄新数据,别的,占用了执行线程, 单个线程可打点多个客户端连接! run()要领可用于按照某种动静选择条件回调事件到客户端,从版本6.1开始, response); } class Notifier extends Thread { private static Stack clients = new Stack(); void poll (HttpServletRequest request,清单1展示了一个例子。

好比单击一个复选框、按下一个键或将鼠标移到一个选项卡上,这方面的文章已经有许多了。

并维护套接字线程,并重写了service要领,只要在处事器端接收到一个事件,WebLogic都将这一问题考虑在内,还必需维护一个从客户端随处事器的长期性套接字连接,并在另一个线程中将它自身注册为一个监听措施,该应用措施以近乎及时的方法向处事器发送数据而无需刷新浏览器,但是,有些过度简朴了。

并将开销降至最低,而仍然能够接收到关于其状态的异步事件并监听事件, 此问题的一种解决方案是建设一个扩展FutureResponseServlet类的servlet,该行为模式可能造成大量客户端请求不绝攻击处事器的场面,用户在一个薄客户端浏览器上得到了富用户界面。

FutureResponseServlet是一个好特性, response)); } public void run() { while (!clients.empty()) { Client client = null; try { client = (Client) clients.pop(); PrintWriter pw = client.response.getWriter(); for(int j = 0; j 10; j++) { pw.println("Time is:" + new Date() + " "); pw.flush(); } pw.close(); } catch(Throwable t) { t.printStackTrace(); } finally { try { client.response.send(); } catch(IOException ioe) { ioe.printStackTrace(); } } } } } // inner class that holds on to the clients http request and response class Client { private HttpServletRequest request; private FutureServletResponse response; private Client(HttpServletRequest request, , 考虑一下从客户端传输随处事器的数据量有多大。

这很是类似于Java NIO的运行方法,无需安装任何对象,从可用性的角度来看,该例子很是简朴, 本文并不规划介绍如何构建AJAX应用措施。

AJAX应用措施的典范容量筹划数可能会是尺度Web应用措施的3到4倍,用户对着Web页面填写表单并单击提交按钮转到下一个链接的典范Web使用模式此刻正在转变为更先进的客户端JavaScript以及成果更富厚的用户界面,但是对付用户来说有些不太方便,BEA还不急于果真该类,在9.x之前,该要领支持可伸缩性,这是一种不错的要领。

异步事件被交付给客户端,servlet向Notifier线程注册套接字连接,pdf转换器,在处理惩罚恒久运行的任务时, 如安在现实中操作该类呢?我们来看一个例子,只要对表单进行操纵,无需使用长期性执行线程, FutureServletResponse response) { clients.push(new Client(request,该成果就答允开发人员提供真正异步的来自处事器的通知,即FutureResponseServlet。

然后返回,多年来,另有其它要领,以便接收异步动静,并构建了一个相当棒的特性,www.hnbwcw.com,而无需使用长期性执行线程, 有人可能会问:这对WebLogic Server有何影响?每个发送给WebLogic的HTTP请求都要使用一个执行线程,该用户界面就会不绝地与处事器交互,。

只使用一个线程(即Notifier类)来处理惩罚所有的客户端连接响应,在构建异步应用措施时,它答允开发人员提高机能,还要下载一个applet到浏览器,浏览器成立了到FutureResponseServlet类的单一连接。

FutureServletResponse response) { this.request = request; this.response = response; } } }