Merge pull request #5373 from nim-lang/feature/async-streams
Async streams and HTTP client streaming downloads support
This commit is contained in:
commit
e5341a391d
11 changed files with 387 additions and 94 deletions
53
tests/async/tfuturestream.nim
Normal file
53
tests/async/tfuturestream.nim
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
discard """
|
||||
file: "tfuturestream.nim"
|
||||
exitcode: 0
|
||||
output: '''
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
Done
|
||||
Finished
|
||||
'''
|
||||
"""
|
||||
import asyncdispatch
|
||||
|
||||
var fs = newFutureStream[int]()
|
||||
|
||||
proc alpha() {.async.} =
|
||||
for i in 0 .. 5:
|
||||
await sleepAsync(1000)
|
||||
await fs.write(i)
|
||||
|
||||
echo("Done")
|
||||
fs.complete()
|
||||
|
||||
proc beta() {.async.} =
|
||||
while not fs.finished:
|
||||
let (hasValue, value) = await fs.read()
|
||||
if hasValue:
|
||||
echo(value)
|
||||
|
||||
echo("Finished")
|
||||
|
||||
asyncCheck alpha()
|
||||
waitFor beta()
|
||||
|
||||
# TODO: Something like this should work eventually.
|
||||
# proc delta(): FutureStream[string] {.async.} =
|
||||
# for i in 0 .. 5:
|
||||
# await sleepAsync(1000)
|
||||
# result.put($i)
|
||||
|
||||
# return ""
|
||||
|
||||
# proc omega() {.async.} =
|
||||
# let fut = delta()
|
||||
# while not fut.finished():
|
||||
# echo(await fs.takeAsync())
|
||||
|
||||
# echo("Finished")
|
||||
|
||||
# waitFor omega()
|
||||
|
|
@ -13,7 +13,9 @@ proc asyncTest() {.async.} =
|
|||
var client = newAsyncHttpClient()
|
||||
var resp = await client.request("http://example.com/")
|
||||
doAssert(resp.code.is2xx)
|
||||
doAssert("<title>Example Domain</title>" in resp.body)
|
||||
var body = await resp.body
|
||||
body = await resp.body # Test caching
|
||||
doAssert("<title>Example Domain</title>" in body)
|
||||
|
||||
resp = await client.request("http://example.com/404")
|
||||
doAssert(resp.code.is4xx)
|
||||
|
|
@ -47,7 +49,8 @@ proc asyncTest() {.async.} =
|
|||
echo("Downloaded ", progress, " of ", total)
|
||||
echo("Current rate: ", speed div 1000, "kb/s")
|
||||
client.onProgressChanged = onProgressChanged
|
||||
discard await client.getContent("http://speedtest-ams2.digitalocean.com/100mb.test")
|
||||
await client.downloadFile("http://speedtest-ams2.digitalocean.com/100mb.test",
|
||||
"100mb.test")
|
||||
|
||||
client.close()
|
||||
|
||||
|
|
@ -94,7 +97,8 @@ proc syncTest() =
|
|||
echo("Downloaded ", progress, " of ", total)
|
||||
echo("Current rate: ", speed div 1000, "kb/s")
|
||||
client.onProgressChanged = onProgressChanged
|
||||
discard client.getContent("http://speedtest-ams2.digitalocean.com/100mb.test")
|
||||
client.downloadFile("http://speedtest-ams2.digitalocean.com/100mb.test",
|
||||
"100mb.test")
|
||||
|
||||
client.close()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue