[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] Handling concurent evhttp connections with evhttp_send_reply_chunk.
Dnia 2009-11-18, śro o godzinie 10:40 -0800, Niels Provos pisze:
> On Mon, Nov 16, 2009 at 9:12 AM, Krzysztof Adamski <k@xxxxxxxx> wrote:
> > i would like to build simple HTTPD server using libevent2. It is going
> > to send some quite big files but i would like it to handle couple
> > concurrent connections. The files can be sent in chunks so I'm using
> > evhttp_send_reply_chunk for this. The problem is, how can I send big
> > files while still being able to handle new connections?
>
> The way that chunked connections work at the moment is that you need
> some other event to drive new data being sent to the client. The
> problem with a single-threaded server is not blocking on the file
> reads. In libevent-1.4, there is no way to set watermarks or similar
> feedback mechanisms. However, as we have switched to bufferevents in
> libevent-2.0; this should be possible.
Watermarks seams like a good thing for my case but I just don't accually
know how to use them with evhttp. I would be glad for any details (I'm
libevent newbie and there is not too much of a documentation i could
find, unfortunatly).
> Alternatively, you could read files in a separate process or thread
> and then send data out as it becomes available.
Is is not really something i would like to do. I can write a server that
will serv big files to couple clients in one thread using
select/poll/epoll manually with one thread and one process so i think it
should be possible with libevent too.
> > when client disconnect in the middle of the transfer, however. I can't
> > get fd of the connection form evhttp_request so it's impossible to set
> > event callback for EV_WRITE instead of EV_TIMEOUT.
>
> The problem with how chunked connections work at the moment is that
> you do not get any feedback when they client has closed the
> connection. I will need to take another look at that and write a test
> case for the scenario.
Yes, exactly. It would be really great if there was a way to register a
callback for sending more data and another one for cleaning when client
is disconnected. That's not something I'm currently able to write
myself, however.
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.