0

尝试使用带有 Java servlet 的 Comet,我遇到了一个大问题:似乎没有办法使用已建立的与客户端的连接从浏览器向服务器发送附加数据(写入输入流时在纯 java 中工作)。

当客户端连接到 servlet 时,CometChat 应用程序会出现以下问题,接收一个用于发送输入的表单和一个用于呈现服务器输出的表单:如何才能做到这一点?

我尝试发送 GET、HEAD 和 POST。使用 HEAD 之后,彗星连接将关闭。GET 总是产生 END、BEGIN 和 POST 产生 BEGIN、READ。

我尝试在网上搜索,但我找到的唯一答案是:Comet READ events are generated when there's a POST method with a body

我怎样才能做到这一点?

我正在使用普通的 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);
}

这会产生 BEGIN,READ。我需要设置哪些标头才能仅生成单独的 READ 事件?

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

真正的方法是什么?

4

2 回答 2

1

祝你好运,使用 Java Servlets 创建 Comet 应用程序是一项相当复杂的工作。另外,Tomcat 并不是真正为它设计的。我建议您查看StreamHub Comet Server

于 2009-10-01T00:52:29.523 回答
0

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

于 2009-10-01T01:17:19.963 回答