[#37730] [Ruby 1.9 - Bug #4962][Open] come back gem_prelude! — Yusuke Endoh <mame@...>

24 messages 2011/07/02

[#37840] [Ruby 1.9 - Feature #4985][Open] Add %S[] support for making a list of symbols — Aaron Patterson <aaron@...>

23 messages 2011/07/07

[#37866] [Backport87 - Feature #4996][Open] About 1.8.7 EOL — Shyouhei Urabe <shyouhei@...>

22 messages 2011/07/08

[#37913] [Ruby 1.9 - Bug #5003][Open] Enumerator#next segfaults in OS X Lion (10.7) — Ganesh Gunasegaran <ganesh.gunas@...>

16 messages 2011/07/09

[#37917] [Ruby 1.9 - Feature #5005][Open] Provide convenient access to original methods — Lazaridis Ilias <ilias@...>

13 messages 2011/07/09

[#37932] [Ruby 1.9 - Feature #5008][Open] Equal rights for Hash (like Array, String, Integer, Float) — Suraj Kurapati <sunaku@...>

31 messages 2011/07/09

[#37936] [Ruby 1.9 - Feature #5010][Open] Add Slop(-like) in stdlib and deprecate current OptionParser API — Rodrigo Rosenfeld Rosas <rr.rosas@...>

29 messages 2011/07/09

[#37968] [Ruby 1.9 - Bug #5015][Open] method_added" is called in addition to "method_undefined — Lazaridis Ilias <ilias@...>

14 messages 2011/07/10

[#38096] [Ruby 1.9 - Feature #5033][Open] PATCH: 1.9: gc_mark_children: Avoid gc_mark() tail recursion, use goto again. — Kurt Stephens <ks.ruby@...>

14 messages 2011/07/16

[#38109] [Ruby 1.9 - Bug #5034][Open] C Source Code formatting — Lazaridis Ilias <ilias@...>

18 messages 2011/07/16

[#38171] [Ruby 1.9 - Bug #5047][Open] Segfault (most likely involving require) — Jack Christensen <jack@...>

21 messages 2011/07/18

[#38182] [Ruby 1.9 - Feature #5054][Open] Compress a sequence of ends — ANDO Yasushi ANDO <andyjpn@...>

68 messages 2011/07/19

[#38197] [Ruby 1.9 - Feature #5056][Open] About 1.9 EOL — Shyouhei Urabe <shyouhei@...>

39 messages 2011/07/19
[#38900] [Ruby 1.9 - Feature #5056] About 1.9 EOL — Shota Fukumori <sorah@...> 2011/08/10

[#38902] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — Yukihiro Matsumoto <matz@...> 2011/08/10

Hi,

[#39048] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — SASADA Koichi <ko1@...> 2011/08/22

Hi,

[#39055] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — Lucas Nussbaum <lucas@...> 2011/08/23

On 23/08/11 at 06:50 +0900, SASADA Koichi wrote:

[#38295] [Ruby 1.9 - Feature #5064][Open] HTTP user-agent class — Eric Hodel <drbrain@...7.net>

15 messages 2011/07/21

[#38391] [Ruby 1.9 - Bug #5076][Open] Mac OS X Lion Support — Yui NARUSE <naruse@...>

17 messages 2011/07/22

[#38503] [Ruby 1.9 - Feature #5096][Open] offer Logger-compatibility for ext — Eric Wong <normalperson@...>

16 messages 2011/07/25

[#38510] [Ruby 1.9 - Feature #5097][Assigned] Supported platforms of Ruby 1.9.3 — Yui NARUSE <naruse@...>

42 messages 2011/07/26

[#38526] [Backport92 - Backport #5099][Open] Backport r31875 load path performance problem — Aaron Patterson <aaron@...>

19 messages 2011/07/26

[#38538] [Ruby 1.9 - Feature #5101][Open] allow optional timeout for TCPSocket.new — Eric Wong <normalperson@...>

15 messages 2011/07/27

[#38610] [Ruby 1.9 - Feature #5120][Open] String#split needs to be logical — Alexey Muranov <muranov@...>

18 messages 2011/07/30

[#38623] [Ruby 1.9 - Feature #5123][Open] Alias Hash 1.9 as OrderedHash — Alexey Muranov <muranov@...>

14 messages 2011/07/31

[ruby-core:38158] Proposal to merge net2-http for Ruby 1.9.4

From: Yehuda Katz <wycats@...>
Date: 2011-07-18 06:44:50 UTC
List: ruby-core #38158
I gave a talk at Ruby Kaigi about my work on Net::HTTP (
https://github.com/wycats/net-http) and Net::Reactor (
https://github.com/wycats/net2-reactor), and asked that they be considered
for inclusion into Ruby. Several people suggested that I send an email to
this list, so here I am! Since Ruby 1.9.3 is almost finished, I would
propose to include my improvements to Net::HTTP in Ruby 1.9.4.

When I started working on improving Net::HTTP, my main goal was to make it
possible to make a request without reading the response at the same time.
Since then, I have also worked on a number of other improvements.

   - All kinds of requests can support GZip and Inflate
   - It is possible to read_nonblock from Net::HTTP response, even if the
   response has Transfer-Encoding: Chunked, keepalive or compression. This
   makes it possible to use Net::HTTP in reactor libraries, instead of writing
   whole new HTTP libraries for each kind of reactor
   - Make decompression (Gzip and Inflate) use a general-purpose response
   middleware stack that can be set up per-request on the response body. This
   is still experimental.
   - Make the body parsers (regular body and chunked encoding) separate
   objects that can support either blocking read or non-blocking read.
   - A number of structural improvements to make the code easier to work
   with (breaking it up into multiple files, etc.)
   - Improving the tests to test non-blocking read across all kinds of
   requests, and add tests for decompression
   - A number of smaller improvements, such as making Net::HTTP.get(string)
   work

My intent was to retain full backwards compatibility across the API with one
small change:

When using the block form of the request *instance *method (
http.request(...) { ... } ), the behavior remains the same: the body is read
synchronously. However, when a block is not passed, the body is not read
until it is requested. This makes read_nonblock possible. This means that
when a block is not passed, it is up to the consumer of the API to close the
response when they are done with it.

This should not result in any major issues for several reasons:

   - The convenience class methods (Net::HTTP.get, etc.) all use the block
   form, which eagerly reads the body
   - The convenience instance methods (Net::HTTP#get, Net::HTTP#post) use
   the block form, which eagerly reads the body
   - The block form of Net::HTTP.start (as well as Net::HTTP#finish) will
   close the socket
   - The low-level method Net::HTTP#request, when used without a block, will
   not eagerly read the body, but clients that make low-level HTTP requests
   that can receive a body will usually read it
   - In the case of keepalive connections, the previous request body is read
   before a new request can begin

In short, the change, which is required in order to support non-blocking
reads, is extremely constrained, limited to the low-level API, and matches
the normal API used by Ruby I/O.

Thank you for your consideration,

Yehuda Katz
Chief Technologist | Strobe
(ph) 718.877.1325

In This Thread

Prev Next