On 4/4/07, Sebastiaan van Erk <[EMAIL PROTECTED]> wrote:
Hmm... I don't work under Windows, I use Ubuntu Linux, but I'll try
figure out why it keeps sending me READ events after the end of stream
was reached; I'll get back to you on that one (I'll see if I can make a
small test program which exhibits the behavior).

I didn't think you were using Windows, so I didn't mention it: the
problem is that Windows notifies disconnects as a regular read event,
rather than with an error code. In that case, you have to do an
additional read to get the IO exception, after which the connection is
closed. If you don't read (and either let the exception go through or
close the event), the socket goes back to the poller, and is signaled
again right away. That's totally annoying ... It should work properly
in Unix, but you'll get an error event, and that will be the end of
your connection.

The fact that it keeps on calling read could be because I don't throw an
exception or call event.close(). Maybe that's not the correct use of the
Comet interface?

As I said, I don't know what the problem is. I am interested in fixing
identified bugs, and trying to improve on behaviors where I can.

Is it even possible to do output in parts? HTTP is a request/response
protocol and some caches/proxies don't accept any more input once some
output has been committed. With this restriction it would seem that
output in parts is impossible with Comet. After the input stream is
closed, the polling stops and the event method is never called anymore,
providing no means to end the request. The only way of being able to do
output in parts is keeping the request input stream open until all the
output is done.

Evidently, HTTP has never been designed as a protocol where the client
and the server would use it as a convinient way to open a
biderectional communication channel. As a result, this usage can have
unspecified compatibility issues, not scale with proxy X or Y, etc.
Note however that the HTTP protocol is still respected, as long as you
use chunking for all transfers.

The main point in Tomcat was to provide an easy API which would blend
with the servlet API and could meet certain specific needs, until
something better emerges (and it's not going to be an async HTTP
Servlet API, since it would have the same exact compatibility issues).

The reason I keep asking about this

does not make much sense. It's possible there will be refinements to
the behavior eventually, but there's nothing which requires you to
send an EOF on input. You want to do it, but it's really your design
choice and has no real benefit.

Rémy

---------------------------------------------------------------------
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