My BEGIN block in my comet servlet now looks like the code below (added a while loop to read until the buffer is empty). Is that what you had in mind? The buffer in the BEGIN event only contains the client's first message. Am I not emptying the buffer correctly? Although, I wouldn't expect the buffer to contain the client's second message since the client blocks for an ack from the server before sending its second message. Any other thoughts on what happens to the client's second message and why no READ event is generated?
Thanks for your help, Peter if (cometEvent.getEventType() == CometEvent.EventType.BEGIN) { log("Begin for session: " + request.getSession(true).getId()); BufferedReader reader = cometEvent.getHttpServletRequest().getReader(); String line = null; while ((line = reader.readLine()) != null) { log("servlet received: " + line); cometEvent.getHttpServletResponse().getWriter().println("servlet received: " + line); cometEvent.getHttpServletResponse().getWriter().flush(); } } > Filip Hanik wrote: > > it could be because the data from the request already came in with the request. > when the BEGIN happens, perform the actions as if there was a READ as well, ie, empty out the buffer. > > Filip Peter Warren wrote: > The following client code generates a comet BEGIN event on the server > but not a subsequent READ event, as I was expecting. How come? Is my > code wrong? Are my expectations wrong? See sequence of events > commented in code below. > > // client test method that sends messages to server and listens for > responses > public void test() throws IOException { > out.println("test 1"); > out.flush(); > > // server receives client's message, generates a BEGIN event, > and sends response to client > > in = new BufferedReader(new > InputStreamReader(urlConn.getInputStream())); > System.out.println(in.readLine()); > > // client receives server's response and prints it > > out.println("test 2"); > out.flush(); > > System.out.println(in.readLine()); > > // client code blocks here waiting for server response. > // server never generates a READ event. How come? > // Does the HttpURLConnection (see full code below) need to be > set up differently? > // Am I using the PrintWriter incorrectly when sending to the > comet servlet? > > out.close(); > urlConn.disconnect(); > } > > Thanks for any help, > Peter > > -- system -- > > using: > tomcat 6.0.13 on windows xp sp 2 > java 1.6.0_01 > > -- test client & comet servlet source below -- > > ## begin test client ## > > import java.io.BufferedReader; > import java.io.IOException; > import java.io.InputStreamReader; > import java.io.PrintWriter; > import java.net.HttpURLConnection; > import java.net.URL; > > public class CometTestClient { > > private HttpURLConnection urlConn; > > private PrintWriter out; > > private BufferedReader in; > > public static void main(String[] args) throws Exception { > CometTestClient test = new CometTestClient(); > test.test(); > } > > public CometTestClient() throws IOException { > initConnection(); > } > > private void initConnection() throws IOException { > URL url = new URL("http://127.0.0.1/CometTest"); > urlConn = (HttpURLConnection) url.openConnection(); > urlConn.setDoInput(true); > urlConn.setDoOutput(true); > urlConn.connect(); > out = new PrintWriter(urlConn.getOutputStream()); > } > > public void test() throws IOException { > out.println("test 1"); > out.flush(); > > in = new BufferedReader(new > InputStreamReader(urlConn.getInputStream())); > System.out.println(in.readLine()); > > out.println("test 2"); > out.flush(); > > System.out.println(in.readLine()); > > out.close(); > urlConn.disconnect(); > } > } > > ## end test client ## > > ## begin comet servlet ## > > import java.io.BufferedReader; > import java.io.IOException; > > import javax.servlet.ServletException; > import javax.servlet.http.HttpServlet; > import javax.servlet.http.HttpServletRequest; > > import org.apache.catalina.CometEvent; > import org.apache.catalina.CometProcessor; > > public class CometTestServlet extends HttpServlet implements > CometProcessor { > private static final long serialVersionUID = 5472498184127924791L; > > public void event(CometEvent cometEvent) throws IOException, > ServletException { > HttpServletRequest request = cometEvent.getHttpServletRequest(); > // don't want timeout events > cometEvent.setTimeout(1000000); > if (cometEvent.getEventType() == CometEvent.EventType.BEGIN) { > log("Begin for session: " + > request.getSession(true).getId()); > BufferedReader reader = > cometEvent.getHttpServletRequest().getReader(); > String line = reader.readLine(); > if (line != null) { > log("servlet received: " + line); > > cometEvent.getHttpServletResponse().getWriter().println("servlet > received: " + line); > cometEvent.getHttpServletResponse().getWriter().flush(); > } else { > cometEvent.close(); > } > } else if (cometEvent.getEventType() == > CometEvent.EventType.ERROR) { > log("Error for session: " + request.getSession(true).getId() > + ", " + cometEvent.getEventSubType()); > cometEvent.close(); > } else if (cometEvent.getEventType() == > CometEvent.EventType.END) { > log("End for session: " + request.getSession(true).getId()); > cometEvent.close(); > } else if (cometEvent.getEventType() == > CometEvent.EventType.READ) { > log("Read for session: " + request.getSession(true).getId()); > BufferedReader reader = > cometEvent.getHttpServletRequest().getReader(); > String line = reader.readLine(); > if (line != null) { > > cometEvent.getHttpServletResponse().getWriter().println("servlet > received: " + line); > } else { > cometEvent.close(); > } > } > } > } > > ## end comet servlet ## > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]