View source code Display the source code in std/net/curl.d from which this page was generated on github. Improve this page Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone. Page wiki View or edit the community-maintained wiki page associated with this page.

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 conn parameter with a HTTP/FTP instance that has these properties set.

If postData is non-null the method will be set to post for 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

NameDescription
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.

License

Boost License 1.0.

Comments