【发布时间】:2009-09-29 12:18:54
【问题描述】:
尝试用Java servlet 解决Comet,我遇到了一个大问题:似乎没有办法使用已建立的与客户端的连接从浏览器向服务器发送附加数据(编写时在纯Java 中工作)到输入流)。
当客户端连接到 servlet 时,CometChat 应用程序会出现以下问题,接收一个用于发送输入的表单和一个用于呈现服务器输出的表单:现在,如果客户端想要在此连接上发送一些数据,则会在 READ 事件servlet,如何做到这一点?
我尝试发送 GET、HEAD 和 POST。使用 HEAD 之后,彗星连接将关闭。 GET 总是产生 END、BEGIN 和 POST 产生 BEGIN、READ。
我尝试在网上搜索,但我找到的唯一答案是:Comet READ 事件正在生成当有一个带有正文的 POST 方法时
我怎样才能做到这一点?
我使用的是纯 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 请求保持交互模式(尽管在服务器上刷新它),我只能做到 5在未处理以下请求之前,FF 上的请求和 IE 上的 10 个请求。此外,只要在服务器上收到第一个 AJAX 请求,我就会收到 TIMEOUT 事件,每个请求两个永远重复。
真正的方法是什么?
【问题讨论】: