[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Announcing moonslice luv*, and lhttp_parser
- From: Petite Abeille <petite.abeille@...>
- Date: Wed, 10 Oct 2012 22:49:14 +0200
On Oct 10, 2012, at 10:21 PM, Tim Caswell <tim@creationix.com> wrote:
> I could have it wrong. I still don't fully understand keepalive.
> I've love to get feedback from people who understand it better. The
> module is a sample more than anything, but I do intend for it to be
> production quality. http://luvit.io/ is running on moonslice on top
> of luvit right now.
Mark Nottingham's REDbot is a good starting point for sanity check:
http://redbot.org/?descend=True&uri=http://luvit.io
> It supports either a string or a readable stream. A readable stream
> is pretty simple. It's any table that has a :read()(callback) method.
>
> What would a "plain function as body" look like? If the data is
> available syncronously then just use a string, if you need to stream
> over time, use a stream. The simple stream API I designed supports
> "backpressure" so you don't get into situations when you're reading a
> large file from a local disk and writing to some slow mobile client
> and end up buffering everything in ram. The simplest interface I
> could think of is readFunction(callback(err, data)), but I find a
> table with a continuable version of the read is easier to work with.
> For example using coroutines, piping from a file to a socket is as
> simple as:
>
> repeat
> local chunk = await(input:read())
> await(outout:write(chunk))
> while chunk
A function based one could look like this: return function aFile:read( 1024 ) end
The consumer part of it, something like this:
for aChunk in aContent do
-- "do the needful"
end
> That's how I read the spec, and it seems to work. My clients (curl
> and various browsers) seem to like it. There is a change I misread
> the spec though.
The problem with browsers is that they tend to over compensate for a rather hostile environment… so they are not necessarily the best tool for testing protocol compliance…. perhaps try a couple of simple http libraries… for example, luaSocket sports a plain http client… ditto for stock python, ruby & co…