乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Comet學(xué)習(xí)筆記(一)Tomcat與Comet - Shin - 博客園

       gyb98 2010-12-21

      Comet學(xué)習(xí)筆記(一)Tomcat與Comet

      近來(lái)由于畢業(yè)設(shè)計(jì),一直在忙于comet技術(shù)的研究,有了一些心得和想法,特來(lái)與大家分享。

      Comet技術(shù)被稱(chēng)為下一代Ajax技術(shù),主要通過(guò)實(shí)現(xiàn)server push來(lái)解決ajax需要定時(shí)頻繁發(fā)送請(qǐng)求的問(wèn)題。

      通過(guò)Comet技術(shù),客戶(hù)端所需要的response信息不再需要主動(dòng)的去索取,而是在服務(wù)器端以event的形式推至客戶(hù)端。

      Comet技術(shù)常見(jiàn)的實(shí)現(xiàn)方式

      streaming和long polling

      long poll:HTTP的連接保持,直到server端一個(gè)事件觸發(fā)或者到達(dá)timeout事件。client端在收到response消息后,一個(gè)新的HTTP請(qǐng)求會(huì)立刻開(kāi)放。通過(guò)這種方式,server端可以將數(shù)據(jù)在任何時(shí)候push到客戶(hù)端。

      streaming:在streaming方式中,HTTP的連接是始終保持的,即使客戶(hù)端收到響應(yīng),HTTP連接也不斷開(kāi)。

      Tomcat與Comet

            在Tomcat 6中,增加了對(duì)Comet的支持,但是其自帶例子(/webapps/examples/jsp/chat)有很多問(wèn)題,沒(méi)有運(yùn)行成功,懷疑該例并不完整(我的版本Tomcat 6.0.16),經(jīng)過(guò)學(xué)習(xí)和研究,發(fā)現(xiàn)了一些問(wèn)題,希望能給仍然奮戰(zhàn)在其中的朋友一些幫助。

            前期準(zhǔn)備:使用tomcat提供的comet api之前,需要增加對(duì)NIO的支持,配置nio可是相當(dāng)方便,要做的僅僅是在server.xml里邊修改connector:

      <connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8080" redirectport="8443" connectiontimeout="20000">

            Tomcat 6提供了CometProcessor和CometEvent接口,具體功能和操作不再贅述,詳情請(qǐng)見(jiàn)http://tomcat./tomcat-6.0-doc/aio.html。注意:實(shí)現(xiàn)CometProcessor接口后不用在servlet中寫(xiě)doGet,doPoset方法,所有事件在BEGIN,READ,END,ERROR中實(shí)現(xiàn)。

            簡(jiǎn)單的Comet servlet代碼示例:


       1 import java.io.*;
       2 import javax.servlet.ServletException;
       3 import javax.servlet.http.*;
       4 import org.apache.catalina.CometEvent;
       5 import org.apache.catalina.CometProcessor;
       6 import org.apache.catalina.CometEvent.EventType;
       7 
       8 public class cometServlet extends HttpServlet implements CometProcessor {
       9    
      10         public void event(CometEvent e) throws IOException, ServletException {
      11                if(e.getEventType() == EventType.BEGIN) {
      12                       // fill in code handling here
      13                    HttpServletResponse response = e.getHttpServletResponse();
      14                    PrintWriter out = response.getWriter();
      15                    out.write("Hello world");
      16                    out.flush(); 
      17                    //System.out.println("message sent");
      18                }
      19                if(e.getEventType() == EventType.READ) {
      20                   // fill in code handling here
      21                }
      22                // and continue handing other events
      23         }
      24 }

      在此源代碼中,僅完成向客戶(hù)端發(fā)送Hello World字符串的功能,關(guān)鍵點(diǎn),out.flush()不可缺少,以往在寫(xiě)ajax程序的時(shí)候,往往忽略寫(xiě)這句話(huà),但這里如果不寫(xiě),客戶(hù)端無(wú)法收到響應(yīng)文字。由于tomcat采用streaming的方式實(shí)現(xiàn)comet,不知是否不加這句話(huà)的時(shí)候,客戶(hù)端不知道你的消息已經(jīng)結(jié)束,而始終處于一個(gè)等待的狀態(tài)(如果您有更專(zhuān)業(yè)的解釋?zhuān)?qǐng)指教)。

            服務(wù)器端javascript相關(guān)代碼:


       1 <script>
       2 function CometEx() {
       3   var request =  new XMLHttpRequest();
       4   request.open("GET"'http://localhost:8080/cometEx/cometServlet'true);
       5   request.onreadystatechange = function() {
       6     if (request.readyState == 3 && request.status == 200) {
       7            alert(request.responseText);     
       8     }
       9   }
      10   request.send(null);
      11 }
      12 </script>
      服務(wù)器端代碼類(lèi)似與普通Ajax代碼,其中,需要注意的是:request.readyState值如果設(shè)置為4,瀏覽器會(huì)處于長(zhǎng)期等待狀態(tài),而收不到響應(yīng)消息,設(shè)置為3后,firefox瀏覽器正常,但I(xiàn)E不能正常獲得消息,由于在學(xué)習(xí)過(guò)程中,要求只用到firefox瀏覽器,并未對(duì)IE瀏覽器進(jìn)行更深一步的研究(希望高手可以提供IE瀏覽器解決方案,謝謝)。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多