Yes, I'm using the NIO connector.  Here is the config line from my
server.xml:

    <Connector port="80"
protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150"
connectionTimeout="20000" keepAliveTimeout="120000"
maxKeepAliveRequests="-1" acceptorThreadCount="2" redirectPort="8443" />

Are there any other configuration options I need to set?

Peter

Filip Hanik - Dev Lists wrote:
> and you are using the APR or the NIO connector right?
>
> Filip
>
> Peter Warren wrote:
>> Thanks for the suggestion.  I changed the comet test servlet to read
>> directly from the input stream as shown in the advanced io example.  I'm
>> still seeing the same behavior.  No comet read event gets generated on
>> the server, only the begin event which contains the client's first
>> message.  The client then sends its second message and blocks waiting
>> for the server.  No events are generated on the server in response to
>> the client's second message.  Any other tips for me?
>>
>> Thanks,
>> Peter
>>
>> from the CometTestServlet:
>>
>>     public void event(CometEvent cometEvent) throws IOException,
>> ServletException {
>>     ...
>>         if (cometEvent.getEventType() == CometEvent.EventType.BEGIN) {
>>             log("Begin for session: " +
>> request.getSession(true).getId());
>>             String clientMessage = read(request);
>>             if (clientMessage != null && clientMessage.length() > 0) {
>>                 response.getWriter().println(clientMessage);
>>                 response.getWriter().flush();
>>             }
>>         }
>>     ...
>>
>>     private String read(HttpServletRequest request) throws IOException {
>>         InputStream is = request.getInputStream();
>>         StringBuffer inputBuffer = new StringBuffer();
>>         byte[] buf = new byte[512];
>>         do {
>>             int n = is.read(buf); // can throw an IOException
>>             if (n > 0) {
>>                 inputBuffer.append(new String(buf, 0, n));
>>                 log("Read " + n + " bytes: " + new String(buf, 0, n) + "
>> for session: "
>>                         + request.getSession(true).getId());
>>             } else if (n < 0) {
>>                 log("comet read error");
>>             }
>>         } while (is.available() > 0);
>>         return inputBuffer.toString();
>>     }
>>
>> from the CometTestClient:
>>
>>     public void test() throws IOException {
>>         out.println("test 1");
>>         out.flush();
>>
>>         String line = read(urlConn.getInputStream());
>>         System.out.println(line);
>>
>>         out.println("test 2");
>>         out.flush();
>>
>>         line = read(urlConn.getInputStream());
>>         System.out.println(line);
>>
>>         out.close();
>>         urlConn.disconnect();
>>     }
>>
>>     private String read(InputStream is) throws IOException {
>>         StringBuffer inputBuffer = new StringBuffer();
>>         byte[] buf = new byte[512];
>>         do {
>>             int n = is.read(buf); // can throw an IOException
>>             if (n > 0) {
>>                 inputBuffer.append(new String(buf, 0, n));
>>             } else if (n < 0) {
>>                 return ("read error");
>>             }
>>         } while (is.available() > 0);
>>         return inputBuffer.toString();
>>     }
>>
>> Filip Hanik - Dev Lists wrote:
>>  
>>> take a look at the documentation, the way you are reading it is
>>> incorrect.
>>> you need to take advantage of the available() method
>>>
>>> Filip
>>>
>>> Peter Warren wrote:
>>>    
>>>> 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]
>>>>
>>>>
>>>>
>>>>         
>>> ---------------------------------------------------------------------
>>> 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]
>>
>>
>>
>>   
>
>
> ---------------------------------------------------------------------
> 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]

Reply via email to