[jdev] JEP-0124: multiple HTTP connections
Justin Karneges
justin-keyword-jabber.093179 at affinix.com
Fri Feb 3 16:46:23 CST 2006
On Friday 03 February 2006 13:52, Peter Saint-Andre wrote:
> the connection manager fairly complex to code (and more complex than it
> needs to be unless there is some compelling reason to support multiple
> connections).
To explain this requires some polling background:
Suppose a client normally polls every 30 seconds, but the polling attempt only
takes 2 seconds to complete. This means that 28 seconds is spent without a
communications channel, assuming the client never tries to send data during
that period. If the server is smart, it could wait before returning data,
holding the connection open until data is ready.
There are two huge benefits to this server optimization:
1) it has the potential to reduce the frequency the client will poll
2) instead of, for example, having a 2 second receive window and a 28 second
idle period, there could be a 30 second receive window. Now if data arrives
after 5 seconds, it is received instantly, instead of 25 seconds late.
However, there is a disadvantage you might notice. While the server is
holding the HTTP connection open, the client is unable to perform another
HTTP POST. Thus, while the server optimization may yield instantaneous
received messages, sent messages will be stuck with, for example, a 28 second
pending period. If the server didn't perform this optimization at all, then
sent messages could go out instantly. So it becomes a tradeoff: we can have
fast received messages or fast sent messages, but not both.
But this is under the assumption that you can only have one HTTP connection.
If JEP-124 allows at least two connections, then the client can "sit" on one
connection that the server holds open, for instantly receiving data, and it
can create secondary channels as necessary for instantly sending data. This
would allow JEP-124 to perform nearly as well as TCP.
-Justin
More information about the JDev
mailing list