Function std.net.curl.byChunkAsync
HTTP
/FTP
fetch content as a range of chunks asynchronously.
A range of chunks is returned immediately and the request that fetches the
chunks is performed in another thread. If the method or other request
properties is to be customized then set the
parameter with a
conn
HTTP
/FTP
instance that has these properties set.
If
is non-null the method will be set to postData
for post
HTTP
requests.
The background thread will buffer up to transmitBuffers
number of chunks
before is stops receiving data from network. When the main thread reads the
chunks from the range it frees up buffers and allows for the background
thread to receive more data from the network.
If no data is available and the main thread access the range it will block
until data becomes available. An exception to this is the wait(Duration)
method on the AsyncChunkInputRange. This method will wait at maximum for the specified
duration and return true if data is available.
Prototypes
auto byChunkAsync(Conn, PostUnit)( const(char)[] url, const(PostUnit)[] postData, size_t chunkSize = 1024, size_t transmitBuffers = 10, Conn conn = Conn() ) if (isCurlConn!Conn); auto byChunkAsync(Conn)( const(char)[] url, size_t chunkSize = 1024, size_t transmitBuffers = 10, Conn conn = Conn() ) if (isCurlConn!Conn);
Example
import std.net.curl, std.stdio; // Get some pages in the background auto range1 = byChunkAsync("www.google.com", 100); auto range2 = byChunkAsync("www.wikipedia.org"); foreach (chunk; byChunkAsync("dlang.org")) writeln(chunk); // chunk is ubyte[100] // Chunks already fetched in the background and ready foreach (chunk; range1) writeln(chunk); foreach (chunk; range2) writeln(chunk);
import std.net.curl, std.stdio; // Get a line in a background thread and wait in // main thread for 2 seconds for it to arrive. auto range3 = byChunkAsync("dlang.com", 10); if (range.wait(dur!"seconds"(2))) writeln(range.front); else writeln("No chunk received after 2 seconds!");
Parameters
Name | Description |
---|---|
url | The url to receive content from |
postData | Data to HTTP Post |
chunkSize | The size of the chunks |
transmitBuffers | The number of chunks buffered asynchronously |
conn | The connection to use e.g. HTTP or FTP . |
Returns
A range of ubyte[chunkSize
] with the content of the resource pointer to by
the URL.
Authors
Jonas Drewsen. Some of the SMTP
code contributed by Jimmy Cao.