2014-03-20 15:28 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: > Thanks for all your input, I think I have now an implementation that > works on Tomcat and Jetty. > > By testing it, I've found something that can be an interesting > information for you. > > The upload variant with forking a new thread is very very slow. > My non scientific tests by uploading a file from 1.4 GB: > - with tomca 8.0.3: > /upload2: 4.5 s > /upload (with new Thread): 2 mn > > - with jetty 9.1: > /upload2: 3.6 s > /upload (with new Thread): 4.1 s > > I tested it by removing all Thread.sleep from > https://github.com/yanns/servlet31_async/blob/master/src/main/java/com/yann/ReadListenerImpl.java#L24
Should I fill an issue for this? > > Cheers, > Yann > > 2014-03-20 9:36 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: >> One option I am trying is to ignore onAllDataRead and to use >> sevletInputStream.isFinished to know when the body is totally >> consumed: >> >> https://github.com/yanns/servlet31_async/blob/master/src/main/java/com/yann/ReadListenerImpl.java#L55 >> >> Is it a dumb idea? >> >> 2014-03-20 7:42 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: >>> Thanks Rémy and Mark for the quick feedback and explanations! >>> >>> On Mar 19, 2014 6:40 PM, "Mark Thomas" <ma...@apache.org> wrote: >>>> >>>> On 19/03/2014 17:04, Rémy Maucherat wrote: >>>> > 2014-03-19 17:47 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: >>>> > >>>> >>> This is because you're forking a thread, it won't concurrently invoke >>>> >>> the >>>> >>> two events (which would be invalid). >>>> >> >>>> >> Can you explain more please? I have difficulties to understand your >>>> >> sentence. >>>> >> >>>> > >>>> > It means the container has to wait until onReadPossible completes to >>>> > call >>>> > onDataAvailable. >>>> >>>> I think Rémy meant Tomcat waits for onReadPossible() to complete before >>>> calling onAllDataRead() >>>> >>>> If you look at the traces from the sample code, you'll see that the >>>> >>>> onDataAvailable end >>>> >>>> message always appears before >>>> >>>> onAllDataRead >>>> >>>> which is all you can rely on. You are seeing slightly odd behaviour >>>> because you are spawning a new thread to do the read. If you do that you >>>> have to handle the case that your new thread may trigger the >>>> onAllDataRead event and handle it appropriately. I don't see anything >>>> for Tomcat to do here. >>>> >>>> Mark >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>> >>> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org