Date | Commit message (Collapse) |
|
We can eliminate the State module to simplify our code
since 1.3.x keeps better track of things.
|
|
It's almost just like Coolio
|
|
bogomips.org is slimming down and losing URL weight :)
|
|
It was based off the nginx window of 64 events. Not that
any servers are really that busy...
|
|
This allows us to gracefully shutdown more quickly.
|
|
The WebSocket protocol is still undergoing changes and unused.
We won't waste time supporting it until it's finalized and
doesn't break HTTP.
|
|
Nothing we can do about that from clients. Perhaps kgio
should just return nil for those...
|
|
ev_core is always loaded after forking, so eliminate the
need for extra setup steps for each concurrency model that
uses it
|
|
It turns out to be less-used than previous anticipated,
so there's no point in having yet another module.
|
|
It's the only place we ever use it
|
|
We handle that locally in rainbows/response now
|
|
Constant strings mean the runtime won't have to allocate new
objects all the time since GC is currently the biggest
performance problem of Ruby 1.9.x in my experience.
|
|
chunked Transfer-Encoding is only valid for HTTP/1.1
|
|
Or at least it should :)
|
|
we need to get in the habit of using this more
|
|
We guarantee the Rack env will exist for the duration of
the request/response cycle, so we can just tweak
"rainbows.autochunk".
|
|
Coolio and EventMachine only use level-triggered epoll,
but being Rainbows!, we live on the EDGE!
|
|
This makes content-md5 tests much faster since we
no longer wait for the server to to timeout.
|
|
Single-threaded concurrency models can reuse a single
buffer to avoid thrashing memory and causing unnecessary
GC activity.
|
|
normal signals can get lost easily :<
|
|
We always try to track the latest and greatest. We've also
updated the test to actually test concurrency since
rack-fiber_pool reuses recent fibers now.
|
|
There is one incompatible change: We no longer assume application
authors are crazy and use strangely-cased headers for "Content-Length",
"Transfer-Encoding", and "Range". This allows us to avoid the
case-insensitivity of Rack::Utils::HeaderHash for a speed boost on the
few apps that already serve thousands of requests/second per-worker.
:Coolio got "async.callback" support like :EventMachine, but it
currently lacks EM::Deferrables which would allow us to call
"succeed"/"fail" callbacks. This means only one-shot response writes
are supported.
There are numerous internal code cleanups and several bugfixes for
handling partial static file responses.
|
|
We need to ensure this esoteric feature keeps working for some
people.
|
|
We cannot trigger on_read events and invoke the HTTP parser and
modify @env while we're waiting for an application to run
async.callback. We also need to clear (and *maybe* re-set)
@deferred if we're writing from async.callback
|
|
Both use @deferred to refer to the state where there's a
deferred response body in the queue.
|
|
Nobody uses it anymore
|
|
The lack of an equivlent to EM::Deferrable prevents us from
doing streaming/trickling responses, but a one-shot body
should work fine for Coolio and generating dynamic responses.
|
|
It's more natural and easier to maintain this way
since Coolio::Client is always lazy loaded.
|
|
* lazy load uncommon classes: StreamFile, Response{Chunk,}Pipe
* remove needless rainbows/coolio/sendfile module since we're
lazily loaded now along with the rest of rainbows/coolio/client
and only in the worker.
|
|
We don't want that loaded in the parent process since
we want config reloadability.
|
|
We check the return code anyways, and spewing random binary
data to the terminal with verbosity on is not a good idea.
|
|
No point in having too many modules to search around
(for both hackers and the runtime).
|
|
Since we support keepalive now, setting @state can be
harmful and the comment is out-of-date.
|
|
We want to put all constants in one place.
|
|
Rack::Utils::HeaderHash is still expensive, so avoid
forcing it on users since we can assume app/library
authors use normally-cased HTTP headers.
|
|
Hash#[] is slightly slower on the miss case due to calling
Hash#default (but faster for the hit case, probably because it
is inlined in 1.9).
|
|
We can't possibly keep track of all sub-dependencies,
so only declare primary dependencies until we find
a known problem with a sub-dependency.
|
|
I realize this lock overly covers different versions of
Ruby, but it's simple and we don't need to invoke isolate
too often (we hope).
|
|
It's out and it works, so why not.
|
|
We need to split out Cramp tests to Isolate to a
different path, which sucks, but oh well. Cramp
hasn't had a release in a while...
|
|
Rack::Lint already stops apps from using it. If a developer
insists on it, then users who inspect their HTTP headers can
point and laugh at them for not using Rack::Lint!
|
|
We already set a Status: header by default for compatibility
with some existing, broken libraries out there.
|
|
Reading headers is common and we don't want to create new String
objects (even if they're tiny or copy-on-write) for the GC to
munch on.
|
|
async.callback will be useful with Coolio (and more!) soon, so
ensure it works as well as the rest of Rainbows!
|
|
This will allow Coolio to use it, too.
|
|
We noticed a few more things that could be cleaned
up after the last commit.
|
|
Code organization is hard :<
|
|
|
|
No need to split it out when there's only a single
class using it.
|
|
Easier just to use an instance variable
|