could some of the more effecent things done to improve ftp be done to
improve http also?



Doug Turner wrote:

> Happy New Year,
>
> I have been hacking on FTP for the last two weeks (prior to a short
> but well spent vacation).  The mission was to remove the threadpool
> and make FTP asynchronous.  I am about a week away from landing
> assuming that I do not run into any major problems.  During this time,
> I hope to find as may problems as possible.  If you are so inclined,
> feel free to help me out and pull these changes.
>
> A quick look at the performance delta is about 7% for directory
> listing download (not tree/rdf building) favoring the new
> implementation.  I hope to gather some more in-depth data later.
>
> How to update:
> cvs up -rDOUGT_FTP_12122000_BRANCH mozilla/netwerk/protocol/ftp
>
> Tags:
> FTP Base tag:   DOUGT_FTP_12122000_BASE
> FTP Branch tag: DOUGT_FTP_12122000_BRANCH
>
> Diffs:
> cvs diff -u -rDOUGT_FTP_12122000_BASE -rDOUGT_FTP_12122000_BRANCH
> mozilla/netwerk/protocol/ftp
>
> Socket Transport Patch:
> Youll, probably want to apply the patches in this bug too:
> http://bugzilla.mozilla.org/show_bug.cgi?id=63565
>
> Without these changes, you will leak socket transports.  I should be
> checking in this fix in the next day or so.
>
> FTP Changes include:
>
>    * Changes to make FTP asynchronous (eg. be driven by the socket
>      transport).
>    * Moved status codes from public idl to ftpCore.h
>    * Reworked connection cache to store the ftp channel instead of the
>      underlying socket.  This was done so that we could maintain an
>      open pipe to the server.  The previous implementation did not use
>      Async calls so there was no tie between the channel and
>      transport.  AsyncRead holds an AddRef to the stream listener.
>      There is not a way to break this without closing the pipe.
>    * Remove all the AsyncEvent and nsISupport Proxy code.  This is
>      obsolete since we are asynchronous.
>    * Removed lock from nsFTPHandler which protected the connection
>      hashtables.  Instead, I created the hashtables thread safe.
>    * Removed ThreadPools
>    * Remove the ConnectionCache interface.  Static methods are better
>      for this kind of thing because we are in the same component and
>      we do not have to hold references to the protocol handler.
>    * Create a new object nsFtpControlConnection which will wrap the
>      control pipe so that we can (a) cache it and (b) be able to
>      replace the observer without closing the socket.
>    * Renamed mConnThread to mFtpState
>    * Removed Available() call in OnDataAvailable.  We should just the
>      byte count that was passed to us.
>    * Implemented nsFtpState::OnStopRequest so that it cancels us.
>      This is to avoid leaks when a problem occurs before the control
>      connection is established.
>    * More PR_LOG's so that we can understand what the heck is going
>      on! :-)
>    * A whole bunch more... :-)
>
>
> Known Things To Do:
>
>    * Need some perf verification
>    * Need some mac love
>    * Better caching and management of control connections
>    * Check for regressions
>
>
>


Reply via email to