【发布时间】:2010-12-07 02:05:24
【问题描述】:
我正在探索将 Comet 用于我正在进行的项目。
我尝试先使用 Tomcat6 和 CometProcessor API 创建测试应用程序,然后使用 Jetty7 Continuations。
该应用程序在两者上都可以工作,但我在消息的实际显示方面遇到了一些问题。
我使用了创建 XMLHttpRequest 连接并始终保持打开状态的技术,以便服务器可以在可用时将数据持续推送到所有连接的客户端。
我的客户端代码是这样的:
function fn(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState==3){
document.getElementById('dv').innerHTML =(xhr.responseText);
}
if (xhr.readyState==4){
alert ('done');
}
}
xhr.open("GET", "First", true);
xhr.send(null);
}
我在网上某处发现了使用 readyState 3 的东西。
我目前面临两个问题:
在 Firefox 中,此代码运行良好。但是如果我打开一个新选项卡或什至一个新的浏览器窗口,它不会与服务器建立新的连接,并且新选项卡或窗口上不会显示任何内容,只有第一个选项卡/窗口会获得展示。我使用 wireshark 来检查这个,即使在打开第二个选项卡后,它也只显示 1 个连接。我无法理解为什么会发生这种情况。我已经阅读了 2 个连接的限制,但这里只有一个连接。
其次在Chrome中,上面的代码不起作用,并且为readystate 3不调用回调,只有当连接被关闭时服务器我得到输出。
我还想问一下用 Java 做 Comet 的最佳方式/框架是什么。我目前在客户端使用 jQuery。
任何建议将不胜感激!!谢谢
【问题讨论】:
标签: firefox google-chrome jetty comet readystate