Thanks, Filip, for your time on this! I used your changes and still
get an END event. With your changes the client and socket are
definitely staying alive now. I stepped through the client code and
see the end event appear on the server as soon as I step through the
line that writes the 0crlfcrlf:
byte[] outputBytes = new String("0" + DELIMITER +
DELIMITER).getBytes(ENCODING);
--> outputStream.write(outputBytes); // end event appears after this line
Anyway, I don't want to take up any more of your time on this. I'm
using non-chunked httpurlconnections now, which are working fine for
me with comet. I just wanted to let you know the behavior I'm seeing
on my machine. It's possible there are problems with my test, but
you've got the code I'm using. Maybe there's a configuration
difference on our tomcats?
If you want to pursue this further, let me know, and I'm happy to get
you any more information you need. Otherwise, I appreciate your time
and thanks for all your work on tomcat!
Peter
On Jan 22, 2008 2:37 PM, Filip Hanik - Dev Lists <[EMAIL PROTECTED]> wrote:
> your test client is wrong,I've pasted in the correct one
>
> only three changes
> 1. set the timeout so that the socket stays alive
> 2. keep reading data so that the socket stays alive
> 3. 0crlfcrlf as the last chunk
>
> works as expected. to make a workable client, it should read until it
> gets the last-chunk, not read forever like I am doing. I just didn't see
> the need to put in http parsing in the code to demonstrate it.
>
> also, I applied the timeout patch that I wrote about earlier,so I am
> setting the timeout in the comet servlet, without the patch its using
> the connectionTimeout value
>
> package test;
>
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.OutputStream;
> import java.net.NoRouteToHostException;
> import java.net.Socket;
> import java.net.URL;
>
> public class TestClient {
>
> private static final String ENCODING = "ISO-8859-1";
>
> private static final String DELIMITER = "\r\n";
>
> private URL url;
>
> private InputStream inputStream;
>
> private OutputStream outputStream;
>
> private Socket socket;
>
> public static void main(String[] args) throws Exception {
> TestClient test = new TestClient();
> test.test();
> }
>
> private void test() throws Exception {
> url = new URL("http://localhost:8080/comet");
> initConnection();
> sendHeaders();
> send("comet test");
> // uncomment sleep to get END event instead of read error
> // try {
> // Thread.sleep(50);
> // } catch (InterruptedException ie) {
> // // do nothing
> // }
> sendLastChunk();
> // block on read to keep app alive - server never sends response
> byte[] data = new byte[8192];
> int result = inputStream.read(data);
>
> while (result>0) {
> String s = new String(data,0,result);
> System.out.println("Received data:\n"+s);
> result = inputStream.read(data);
> }
> {
> System.out.println("Received EOF");
> }
> }
>
> private void initConnection() throws IOException {
> int port = url.getPort();
> port = (port < 0) ? url.getDefaultPort() : port;
> try {
> socket = new Socket(url.getHost(), port);
> socket.setSoTimeout(Integer.MAX_VALUE);
>
> socket.setKeepAlive(true);
> inputStream = socket.getInputStream();
> outputStream = socket.getOutputStream();
> } catch (NoRouteToHostException nrthe) {
> System.out.println("host: " + url.getHost());
> nrthe.printStackTrace();
> }
> }
>
> private void sendHeaders() throws IOException {
> String path = url.getPath();
> StringBuffer outputBuffer = new StringBuffer();
> outputBuffer.append("POST " + path + " HTTP/1.1" + DELIMITER);
> outputBuffer.append("Host: " + url.getHost() + DELIMITER);
> outputBuffer.append("User-Agent: CometTest" + DELIMITER);
> outputBuffer.append("Connection: keep-alive" + DELIMITER);
> outputBuffer.append("Content-Type: text/plain" + DELIMITER);
> outputBuffer.append("Transfer-Encoding: chunked" + DELIMITER);
> outputBuffer.append(DELIMITER);
> byte[] outputBytes = outputBuffer.toString().getBytes(ENCODING);
> outputStream.write(outputBytes);
> outputStream.flush();
> }
>
> private void send(String chunkData) throws IOException {
> byte[] chunkBytes = chunkData.getBytes(ENCODING);
> String hexChunkLength = Integer.toHexString(chunkBytes.length);
> StringBuffer outputBuffer = new StringBuffer();
> outputBuffer.append(hexChunkLength);
> outputBuffer.append(DELIMITER);
> outputBuffer.append(chunkData);
> outputBuffer.append(DELIMITER);
> byte[] outputBytes = outputBuffer.toString().getBytes(ENCODING);
> outputStream.write(outputBytes);
> outputStream.flush();
> }
>
> private void sendLastChunk() throws IOException {
> byte[] outputBytes = new String("0" +
> DELIMITER+DELIMITER).getBytes(ENCODING);
> outputStream.write(outputBytes);
> outputStream.flush();
> }
> }
>
>
> Peter Warren wrote:
> > Just to make sure that I wasn't crazy, I did some more tests,
> > including using your cometgui.jar. My results still show both read
> > errors and END events. Is it possible that it's a platform issue?
> > I'm running Windows XP Pro SP2. As I mentioned before I'm using the
> > tomcat 6.0.x trunk as of 21-01-2008. Also, I re-started tomcat in
> > between all tests to make sure there weren't stray bytes hanging
> > around somewhere. My server code is the same as shown previously in
> > this thread.
> >
> > Peter
> >
> > Here are my results:
> >
> > 1) Running LastChunkTest (code below) with last chunk of 0crlfcrlf,
> > server shows:
> >
> > event: BEGIN, subtype: null
> > event: READ, subtype: null
> > Read 10 bytes: comet test for session: 627378C9DEE2817A93EBAC190DE47599
> > read error
> >
> > 2) Running LastChunkTest with last chunk of 0crlfcrlf and a 50 ms
> > sleep before sending last chunk, server shows:
> >
> > event: BEGIN, subtype: null
> > event: READ, subtype: null
> > Read 10 bytes: comet test for session: A00EFFC9A9FE8CBF1833D204EF00667C
> > event: END, subtype: null
> >
> > 3) Running LastChunkTest with a last chunk of 0crlf, server shows:
> >
> > event: BEGIN, subtype: null
> > event: READ, subtype: null
> > Read 10 bytes: comet test for session: DD41C198E3D5CD6E7D73FC0D7B37E86F
> >
> > 4) Running cometgui.jar with 0crlfcrlf:
> >
> > client sends (without the dashes):
>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: [email protected]
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]