tomcat - 为什么我需要关闭 cometd 事件才能发送数据? ( Tomcat 6)

标签 tomcat tomcat6 comet

我在 tomcat 6 上使用 comet 从服务器推送数据,如下所述:http://www.ibm.com/developerworks/web/library/wa-cometjava/

我的问题很简单:如果我在 writer.printwriter.flush 之后不执行 event.close(); >,那么数据似乎没有发送到客户端,因为没有调用 XMLHttpRequestonreadystatechange

正常吗?

因此,每次接收数据时我都需要向服务器发送一个新的请求,因为需要关闭连接才能发送数据。

有什么解决办法吗?

最佳答案

不,这对于 Chrome、Safari、FireFox 来说不正常。因为在事件readystate.LOADED上它可以在客户端处理来自服务器的数据

/**
* @param {string} url
* @param {function(*)} callback 
* @param {boolean} reload */
archiva.io.streamXhr = function(url, callback) {

    var xhr = new goog.net.XhrIo();
    var lastIndex = -1;
    var delimiter = '\n';

    goog.events.listen(xhr, goog.net.EventType.READY_STATE_CHANGE, function() {
        // As more data is loaded, look for the next delimiter so the JSON can // be extracted, parsed, and passed to the callback.

        if ( xhr.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ) {
            var str = xhr.getResponseText();
            var index;
            while ((index = str.indexOf(delimiter, lastIndex + 1)) != -1) {
                var json = str.substring(lastIndex + 1, index);
                callback(json);
                lastIndex = index;
            }
        }

        if (xhr.isComplete()) {
            // Reconnect if the response finishes for any reason.
            archiva.io.streamXhr(url, callback);
            xhr.dispose();
        }
    });

    xhr.send(url, 'POST'); 
};

和 xhr.getReadyState() 没有这样的浏览器将是 3 并且 getResponseText() 将返回响应文本(当服务器端执行 writer.flush() 并且不需要 writer.close() ) 。

但是由于 IE < 10,在 state = 3 上不可能 getResponseText(),只能在 state == 4 上进行。状态 4 是关闭状态。这就是为什么您需要在刷新数据后关闭连接,因为其他情况下 IE 将继续加载数据并且从不处理它。但可以在服务器端和关闭后管理数据量;

看这个链接,怎么实现tomcat 7 comet

希望这有帮助

关于tomcat - 为什么我需要关闭 cometd 事件才能发送数据? ( Tomcat 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287210/

相关文章:

java - 配置 View 未找到异常以显示 404

node.js - 移动App聊天服务器开发

jquery - 在 Tomcat 服务器上使用 JQuery 进行长轮询的问题

tomcat - 为基本身份验证创建没有用户名和加密密码的 Tomcat 用户

java - 如何检索 tomcat 实例中的 Activity session ?

Tomcat升级7到8.5

php - 长轮询超时问题

java - jsp调用其他类的函数

tomcat - 启动 Tomcat 6,仅运行管理器应用程序

java - 非法访问 : this web application instance has been stopped already. 无法加载 org.apache.log4j.spi.NOPLoggerRepository