You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Agustin Iannicelli <ag...@gmail.com> on 2011/04/12 00:19:00 UTC

Comet Problem

Hello, i have a problem to implement a Comet Server, i use tomcat 7
and i  try to keep many connections open and for each client connected
return a string each time than other client press "go()" but the
return from the server only happend when the time out expired, and
execute the  event.close(); and close my connection....

how can i send data to the clients without close the connection or
call event.close() ???

i hope you undertend me

thanks

Agustin

pd: my source code...

 **SERVER

@WebServlet(urlPatterns = {"/Prueba"})
public class Prueba extends HttpServlet implements CometProcessor {

       private static final long serialVersionUID = 1L;
       private static final Integer TIMEOUT = 20 * 1000;
       private List<HttpServletResponse> responseList = new
ArrayList<HttpServletResponse>();
   /**
    * @see HttpServlet#HttpServlet()
    */
   public Prueba() {
       super();
   }

   public synchronized void event(final CometEvent event) throws
IOException, ServletException
   {
       HttpServletRequest request = event.getHttpServletRequest();
       HttpServletResponse response = event.getHttpServletResponse();
       event.setTimeout(TIMEOUT);

       if (event.getEventType() == CometEvent.EventType.BEGIN) {

               if(!responseList.contains(response))
               {
                       responseList.add(response);
                       log( "se agrego la el req de session: " +
request.getSession(true).getId());
               }


           for (HttpServletResponse res : responseList)
           {
               ServletOutputStream out = res.getOutputStream();
               //PrintWriter out = res.getWriter();
               log("Begin for session: " + request.getSession(true).getId());
               out.print("<p>session: " +
request.getSession(true).getId() + "  cant logueados: " +
responseList.size() + " </p>");
               out.flush();
               log("Sended message for session: " + request.getSession(true);
          }

       } else if (event.getEventType() == CometEvent.EventType.ERROR) {
           log("Error for session: " + request.getSession(true).getId());
           event.close();
       } else if (event.getEventType() == CometEvent.EventType.END) {
           log("End for session: " + request.getSession(true).getId());
           event.close();
       } else if (event.getEventType() == CometEvent.EventType.READ) {
           throw new UnsupportedOperationException("This servlet does
not accept data");
       }

   }



**CLIENT

<javascript>
var url = "Prueba?msg=hola";
       var request =  new XMLHttpRequest();
       request.onreadystatechange = orsc;

       function go(){
               request.open("GET", url, true);

request.setRequestHeader("Content-Type","multipart/x-mixed-replace");
               request.send(null);
           }

       function orsc()
       {

               if (request.readyState == 4) {
                       document.getElementById("forecasts").innerHTML
+= "ready 4";
                       if (request.status == 200){

document.getElementById("forecasts").innerHTML += "ready 200";
                   if (request.responseText) {
                       document.getElementById("forecasts").innerHTML
+= request.responseText;
                   }
               }
           }
       }

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org