firefox之Comet Jetty/Tomcat,Firefox 和 Chrome 有一些浏览器问题

sharpest 阅读:122 2024-08-16 13:18:33 评论:0

我正在探索 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 的东西。

我目前面临两个问题:

  1. Firefox 中,此代码完美运行。但是如果我打开一个新标签甚至一个新的浏览器窗口,它不会与服务器建立新连接并且新标签或窗口上没有任何显示,只有第一个标签/窗口获得展示。我使用 wireshark 来检查这个,即使在打开第二个选项卡后它也只显示 1 个连接。我无法理解为什么会这样。我已经阅读了 2 个连接限制,但这里只有一个连接。

  2. 其次,在 Chrome 中,上述代码不起作用,回调不会为 3 的就绪状态调用,只有当连接被关闭时服务器我得到输出。

我还想问一下用 Java 做 Comet 的最好方法/框架是什么。我目前在客户端使用 jQuery。
任何建议将不胜感激!!谢谢

请您参考如下方法:

将 comet 与 Jetty 一起使用可以很好地与 bayeux 和 dojo 配合使用。支持比简单的 XMLHttpRequest 更高级别。相反,您可以订阅单独的 channel ,并能够注册在特定事件出现在 channel 上时触发的功能。在单个浏览器中与不同选项卡建立多个连接非常简单,并且(根据我的经验)适用于 Firefox、Chrome 和 Safari。

我有一个用 Java 运行的服务器和用 javascript 运行的客户端。


标签:Tomcat
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号