我试图解决如何在不折叠服务器的情况下为IE进行流式传输和长轮询。这就是我的想法。
我将有一个名为:TimeServlet的servlet。
在doGet或doPost()中..我将暂停请求并在每秒发送时间。
....
suspend()
while(!stopped){
request.writeln(new Date().toString());
}
或使用Scheduler和Runnable,但是你明白了。
在javascript中的客户端上,我将创建一个ajax连接。
我的大问题是:
1 - 如何使用IE进行流媒体传输?使用Firefox和Chrome时,我在readyState == 3时读取数据,但在IE中,数据仅在readyState == 4上可用。
2 - 如何在此示例中进行长轮询?长轮询阻塞直到服务器有数据要推送,但在这个例子中,服务器总是有东西要推送,所以客户端会做类似while(true)的事情并充斥服务器。我想我必须做那样的事情
ajax.push(null)... on readyState == 4 - >读取...之后的setTimeout(resendRequest,1); // 1秒?
有人有这样的样本吗?
我的代码适用于FF和Chrome,但现在我正在寻找IE和Opera。
修改
我发现我可以在IE中使用XDomainRequest进行流式传输。您必须在服务器代码中使用它:
response.setHeader("访问控制允许来源"" *&#34);
我还没有回答这个问题,因为我不知道如何检测到连接已经完成。
使用Ajax,很容易.. ReadyState == 4。但我不知道XDomainRequest。我需要能够在连接关闭时触发一些javascript回调。有什么想法吗?
答案 0 :(得分:1)
我找到了如何检测关闭事件。你必须使用onload方法。
所以代码看起来就像那样
var ajaxRequest = new XDomainRequest();
ajaxRequest.onload = function() {
//alert("[XDR-onload]. responseText: " + ajaxRequest.responseText + "");
};
ajaxRequest.onerror = function() { alert("[XDR-onerror] Fatal Error."); };
ajaxRequest.ontimeout = function() {
alert("[XDR-ontimeout] Timeout Error.");
};
ajaxRequest.onprogress = function() {
//alert("[XDR-onprogress] responseText so far: " + ajaxRequest.responseText + "");
};
并且不要忘记在响应中添加标题(服务器端)
response.setHeader( “访问控制允许来源”, “*”);