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