【问题标题】:Comet, Tomcat and READ eventsComet、Tomcat 和 READ 事件
【发布时间】: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 事件,每个请求两个永远重复。

真正的方法是什么?

【问题讨论】:

    标签: ajax tomcat comet


    【解决方案1】:

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

    【讨论】:

    • 是的,也观察到了,就是想学技术。但是为什么Tomcat在它不可用且不可行的情况下支持此功能???我偶然发现了 StreamHub Comet Server,这很可能是我要走的路。另一个选择可能是来自 Glassfish 的 Project Atmosphere,它声称支持所有 AppServers 以及 Tomcat 和 Jetty。但是谢谢,你的回答让我忘记了纯粹的 tomcat 彗星开发...... Greetz,GHad
    • 没问题。我认为彗星当时正在流行——所以他们决定在没有真正考虑的情况下加入它。对于真正高性能的 Comet,您需要编写一个服务器来处理大量打开的连接。氛围或灰熊可能是另一种选择。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 2010-12-07
      • 2011-04-08
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多