我在我的项目中实现服务器发送事件(HTML5)而不使用node.js,它只是简单的网页(另一个JSP页面)调用,我得到它的响应。但是当我得到它的响应但没有方法/函数(onopen,onmessage或onerror)执行...
客户代码:
if (!!window.EventSource) {
var source=new EventSource("kitAvailCall.jsp");
source.onopen = function(){
alert("Kit is not available");
source.close();
};
source.onmessage=function(event){
console.log(event.data);
alert("Kit is not available");
}
source.onerror =function(){
console.log("EventSOurce: Getting error call");
alert("Kit is not available");
}
}
服务器端代码:
try{
while(true) {
Thread.sleep(15000);
String IpAddress = (String) session.getAttribute("IPName");
boolean bool;
if(IpAddress != null && ((new Date()).getTime() - session.getLastAccessedTime())/1000 > 28){
bool = sample.pingToKit((String) session.getAttribute("IPName"));
System.out.println("Long polling request: "+bool);
//if bool is false then i want to quit loop and back to browser
if(bool == false){
response.setHeader("Content-Type","text/event-stream");
response.setHeader("Cache-Control", "no-cache");
out.print("data: " + bool);
out.flush();
break;
}
}
}
}catch(Exception e){
System.out.println("Going bad CONN:"+ e);
}
答案 0 :(得分:0)
我对Java知之甚少,但我猜想你可能正在监听你作为流发送的相同控制器/ jsp servlet(无论java中的路由数据)。 在kitavailcall.jsp以外的页面上收听。此脚本仅用于流式传输,使用除kitavailcall.jsp之外的其他视图/ html页面 您必须了解的是,SSE是一个并发进程,您创建另一个页面并使用该页面中包含的javascript(客户端代码)在该页面上运行。您的服务器也应该支持多线程。