Java 在HTTP流式servlet中实现每个请求的线程
我正在实现HTTP流式servlet,以向客户端发送推送通知。在该容器中还有Jersey JAX-RS REST服务 问题是,当我在两个浏览器窗口中打开流时,我必须等待另一个请求完成 我读过类似的话题 并在两种不同的浏览器中打开了该流——流,并使其正常工作 我尝试使用AsyncContext,但它不是stream,它允许同时打开浏览器选项卡,并在执行结束时线程将所有内容交付给浏览器 我还尝试在两个浏览器选项卡中同时打开示例JSP页面,得到了类似的结果Java 在HTTP流式servlet中实现每个请求的线程,java,servlets,push-notification,http-streaming,Java,Servlets,Push Notification,Http Streaming,我正在实现HTTP流式servlet,以向客户端发送推送通知。在该容器中还有Jersey JAX-RS REST服务 问题是,当我在两个浏览器窗口中打开流时,我必须等待另一个请求完成 我读过类似的话题 并在两种不同的浏览器中打开了该流——流,并使其正常工作 我尝试使用AsyncContext,但它不是stream,它允许同时打开浏览器选项卡,并在执行结束时线程将所有内容交付给浏览器 我还尝试在两个浏览器选项卡中同时打开示例JSP页面,得到了类似的结果 <HTML> &
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache">
</HEAD>
<BODY BGCOLOR="blue" TEXT="white">
<%
try {
for (int i=1; i < 100; i++) {
out.print("<h1>"+i+"</h1>");
out.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
out.print("<h1>"+e+"</h1>");
}
}
} catch (Exception e) {
out.print("<h1>"+e+"</h1>");
}
out.print("<h1>DONE</h1>");
%>
</BODY>
</HTML>
作为服务器,我使用ApacheTomcat7.0。但是使用另一个servlet容器不会有问题
有什么建议吗
谢谢从servlet容器中进行自己的线程管理几乎从来都不是一个好主意 有关服务器推入式Tomcat,请参见此处:
但是,您确定客户端轮询不会更容易吗?是因为Thread.sleep()正在停止整个Servlet线程吗?我已经按照指令完成了,删除了doGet方法并实现了CometProcessor接口,删除了infinite while循环并设置了NIO连接器而不是默认的HTTP。实现的事件方法如下:public void event(CometEvent event)抛出IOException,ServletException{if(event.getEventType()==CometEvent.EventType.BEGIN){这是我的订阅逻辑…}}它可以工作,但没有改变。