libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] Problem with HTTP/1.1 chunked packets when connectio


From: Iron Bug at gmail.com
Subject: Re: [libmicrohttpd] Problem with HTTP/1.1 chunked packets when connection is about to close
Date: Tue, 27 Apr 2021 22:11:37 +0500

> For large files you should use
> MHD_create_response_from_fd_at_offset64().
> 
> That will do the right thing.
> 

Alas, in my case the 'files' are not something like FS files or system objects 
exactly, they're blobs in DB, really. And I read chunks from DB blobs (this is 
possible for postgresql) and feed them to callback. But there're a plenty of 
other cases when data is not a file descriptor resource, like transfer of 
packets from other network, when data come chunked. And I think there're many 
more cases for such use. Using callback is the most universal way for 
processing any abstract data. And it's very useful for custom 
deflating/inflating the packets too, considering the block sizes, headers, etc. 
So I see the callback creating form as the most useful one for work with 
abstract binary data in terms of libmicrohttpd. And it's quite robust even in 
HTTP/1.1 when using keep-alive connections. 

> Properly supporting HTTP/2 and HTTP/3 will take developer time (and thus
> funding) that we currently do not have. Evgeny and I would like to see
> it happen eventually -- alas primarily in the context of the
> microhttpd2.h / improved v2.0-API effort.
> 
> Which itself is also stalled because we'd really need to find a huge
> chunk of time to spend on this to make it happen.  So contributions are
> in principle welcome -- alas it is a huge task that I doubt can be done
> purely with volunteers in a timely fashion.
>
I know it's a big task. But HTTP/2 is much faster and HTTP/3 is even more 
robust. I haven't looked at HTTP/3 and QUIC in details yet but I merged the 
HTTP/2 version I found on github (https://github.com/maru/libmicrohttpd-http2) 
with stable libmicrohttpd and keep the merged variant on my server: 
https://git.ironbug.org/libmicrohttpd-http2/
Just in case someone is curious. But I also try to improve the code for 
responses reuse. I want to implement a robust caching for responses, which is a 
very useful for the server I write, and I try to eliminate any unnecessary 
repeated operations that can be omitted wherever possible. So there're a little 
more than just a merge. I experimented there with reuse of responses and made 
little tweaks to make it work.
It's not up to date with the newest released version of stable libmicrohttpd 
yet, but I will review the code for merging it up as I get some spare time for 
this. I cannot say I checked all possible variants, they're too many, but for 
my use case it works fine, both HTTP/1.1 and HTTP/2. I tested it with very 
intensive traffic exchange and it seems good enough for my pet project. 

Sincerely, Yana A. Kireyonok aka Iron Bug 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]