Ajax Comet、Tomcat和READ事件

Ajax Comet、Tomcat和READ事件,ajax,tomcat,comet,Ajax,Tomcat,Comet,试图用Java servlet解决Comet的问题时,我遇到了一个大问题:似乎无法使用与客户端建立的连接从浏览器向服务器发送附加数据(在写入inputstream时使用纯Java) 当客户机连接到servlet,接收用于发送输入的表单和用于显示服务器输出的表单时,CometChat应用程序会出现以下问题:现在,如果客户机希望在这个连接上发送一些数据,导致servlet上发生读取事件,那么如何才能做到这一点 我试着把GET、HEAD和POST发送出去。使用头部,comet连接随后关闭。GET始终生

试图用Java servlet解决Comet的问题时,我遇到了一个大问题:似乎无法使用与客户端建立的连接从浏览器向服务器发送附加数据(在写入inputstream时使用纯Java)

当客户机连接到servlet,接收用于发送输入的表单和用于显示服务器输出的表单时,CometChat应用程序会出现以下问题:现在,如果客户机希望在这个连接上发送一些数据,导致servlet上发生读取事件,那么如何才能做到这一点

我试着把GET、HEAD和POST发送出去。使用头部,comet连接随后关闭。GET始终生成END、BEGIN和POST生成BEGIN、READ

我试着在网上搜索,但我找到的唯一答案是:当有一个带有主体的POST方法时,会生成Comet READ事件

我怎样才能做到这一点

我使用的是纯Javascript Ajax:

function send(content) {
   var text = document.controller.input.value;
   params = 'input=' + content;
   var ajaxObj = createXMLHttp();
   ajaxObj.open('POST', 'CometChat', true);
   ajaxObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   ajaxObj.setRequestHeader('Content-Length', params.length); 
   ajaxObj.setRequestHeader('Connection', 'close');
   ajaxObj.onreadystatechange = function() {};
   ajaxObj.send(params);
}
这就产生了开始,阅读。我需要设置哪些标题才能生成一个只读事件

我可以通过查找我的连接和重用响应来“欺骗”这一点,但在客户端,AJAX请求保持在交互模式(尽管在服务器上刷新它),并且在以下请求未被处理之前,我只能在FF上处理5个请求,在IE上处理10个请求。而且,一旦服务器上收到第一个AJAX请求,我就会得到超时事件,每个请求两个超时事件将永远重复


真正的方法是什么?

祝你好运,用Java servlet创建Comet应用程序是一项相当复杂的任务。另外,Tomcat并不是专门为它设计的。我建议你去看看。

正如拉贾克斯所说,在servlet中开发Comet应用程序是一个非常糟糕的主意。

是的,我也观察到了这一点,只是想学习技术。但是,当Tomcat不可用且不可行时,为什么它支持这些特性呢???我在StreamHub Comet服务器上遇到了麻烦,很可能这就是我的出路。另一个选择可能是Glassfish的Project Atmosphere,该项目声称支持所有AppServer以及Tomcat和Jetty。但是谢谢,你的回答让我忘记了纯tomcat彗星的发展。。。格里茨,加德诺问题。我认为Comet在当时正变得越来越受欢迎,所以他们决定在没有真正考虑它的情况下就把它加上去。对于真正的performant Comet,您需要编写一个服务器来处理大量打开的连接。大气或灰熊可能是另一种选择。