celluloid / reel

UNMAINTAINED: See celluloid/celluloid#779 - Celluloid::IO-powered web server
https://celluloid.io
MIT License
596 stars 87 forks source link

Impossible to pipeline requests #55

Closed rakoo closed 11 years ago

rakoo commented 11 years ago

Reel is great, but wrongly advertise being HTTP/1.1 compatible: one of the most important features, pipelining, is impossible.

When pipelining requests, they are all stacked on the socket. A call to Request.read(connection) will read all of them, feed them to the parser which will correctly detect mutiple requests, but we only see one request from the outside (the last one, in fact)

tarcieri commented 11 years ago

The prerequisites of pipelining are in place. You will notice Reel::Connection tracks request and response state separately.

Regarding it "wrongly advertise being HTTP/1.1 compatible", all I have to say is: pfffffffffffffffftttttt. Pipelining was designed incredibly poorly and has conflicting semantics with many other features. What do you do when you get an Upgrade request in the middle of writing out other pipelined responses?

I almost consider pipelining a misfeature. I kind of want to support it, but probably not enough to do the work.

SPDY provides a much cleaner solution.

Tony Arcieri

On May 4, 2013, at 1:31 PM, Matthieu Rakotojaona notifications@github.com wrote:

Reel is great, but wrongly advertise being HTTP/1.1 compatible: one of the most important features, pipelining, is impossible.

When pipelining requests, they are all stacked on the socket. A call to Request.read(connection)https://github.com/celluloid/reel/blob/816caf619b8217cdf23673eaf5d3e4b8809d4d32/lib/reel/request.rb#L15will read all of them, feed them to the parser which will correctly detect mutiple requests, but we only see one request from the outside (the last one, in fact)

— Reply to this email directly or view it on GitHubhttps://github.com/celluloid/reel/issues/55 .

rakoo commented 11 years ago

Indeed, Requests and Responses are nicely separated, it was a joy to use this for #56.

I'm sorry if I've offended you in any wai, this was absolutely not the goal. I don't have much knowledge in the HTTP world, so I didn't know pipelining could be so problematic; I just figured that it's so much useful for reducing network activity that it's worth using it, especially since it's supposed to be available if we say HTTP/1.1.

tarcieri commented 11 years ago

Fixed in #73