the journey is the reward...

          常用鏈接

          統計

          最新評論

          瀏覽器[IE,Firefox]不支持comet技術-AJAX不能支持服務端推消息

          comet技術:服務端向客戶端主動推消息的技術,但側重基于http的協議,如果是socket則不存在這個問題.

          從tomcat6開始,增加了org.apache.catalina.CometProcessor接口來實現對comet技術的支持.
          修改conf/server.xml 

          <Connector port="8080" protocol="HTTP/1.1"-改為->"org.apache.coyote.http11.Http11NioProtocol"
          java:請參看tomcat.apache.org上的CometServlet的例子.
          import javax.servlet.http.HttpServlet;
          import org.apache.catalina.CometEvent;
          import org.apache.catalina.CometProcessor;

          CometServlet extends HttpServlet implements CometProcessor

          javascript:

          function installComet(){  
           var xmlReq = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
           xmlReq.onreadystatechange = handler;
           xmlReq.open("GET", "/yourapp/comet",true);
           xmlReq.send();
          }
          function handler(){
           try{
            if(xmlReq.readyState){  
             if(xmlReq.readyState>=3){   
              alert(xmlReq.responseText);
             }
            }
           }catch(e){  
            alert(xmlReq.readyState+":e->:"+e.message);
           } 
          }

              在IE瀏覽器各個版本中handler只會被回調一次而不管服務端針對此次連接發多少次消息,此時的readyState為3
          對responseText的操作會引發javascript error:完成該操作所需的數據還不可使用。

              在Firefox中handler會被多次調用,但responseText會緩存前一次的消息而不會清除,responseText的數據會隨著服務端消息的到達而累積.

              到目前為止,瀏覽器只能通過插件的方式來實現對comet技術在客戶端的支持,所以流行的flash player,ActionScript就成為了首選.
          ActionScript通過socket來建立長連接.

              所以那些AJAX框架都不能真正的支持comet,而只能通過poll,setTimeout/setInterval,
          而dwr的ReverseAjax正是使用了setTimeout來poll輪詢服務端的,請參看dwr的engine.js的源碼.

          posted on 2010-02-01 20:43 adapterofcoms 閱讀(1074) 評論(0)  編輯  收藏 所屬分類: java techs

          主站蜘蛛池模板: 阿克陶县| 南昌县| 江山市| 普兰县| 淳化县| 龙山县| 抚顺市| 文山县| 巴中市| 隆德县| 汪清县| 岳阳县| 江安县| 娄底市| 亳州市| 苏尼特右旗| 九寨沟县| 双柏县| 新郑市| 徐汇区| 邹平县| 内丘县| 台南县| 瓮安县| 电白县| 阿坝| 黎川县| 工布江达县| 金平| 微山县| 容城县| 罗田县| 绵阳市| 阿鲁科尔沁旗| 静宁县| 玉屏| 和政县| 蓬溪县| 班戈县| 罗江县| 昭觉县|