diff options
author | bptato <nincsnevem662@gmail.com> | 2024-03-16 23:08:57 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-03-16 23:08:57 +0100 |
commit | 7fd73dff220f7dd5075884059f1c4edc88036813 (patch) | |
tree | ed3c758152ea78011331b49b1191e499b6ae3372 /src/loader/loaderhandle.nim | |
parent | 1e81fdf28bcd25c5fb1c2638b74ddb9d51bd5b72 (diff) | |
download | chawan-7fd73dff220f7dd5075884059f1c4edc88036813.tar.gz |
io: add BuferedWriter
Unsurprisingly enough, calling `write` a million times is never going to be very fast. BufferedWriter basically does the same thing as serialize.swrite did, but queues up writes in batches before sending them. TODO: give sread a similar treatment
Diffstat (limited to 'src/loader/loaderhandle.nim')
-rw-r--r-- | src/loader/loaderhandle.nim | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/loader/loaderhandle.nim b/src/loader/loaderhandle.nim index dbe998c6..6e1b53a9 100644 --- a/src/loader/loaderhandle.nim +++ b/src/loader/loaderhandle.nim @@ -3,8 +3,8 @@ import std/net import std/streams import std/tables +import io/bufwriter import io/posixstream -import io/serialize import loader/headers when defined(debug): @@ -129,12 +129,13 @@ proc sendResult*(handle: LoaderHandle; res: int; msg = "") = let output = handle.output let blocking = output.ostream.blocking output.ostream.setBlocking(true) - output.ostream.swrite(res) - if res == 0: # success - assert msg == "" - output.ostream.swrite(output.outputId) - else: # error - output.ostream.swrite(msg) + output.ostream.withWriter w: + w.swrite(res) + if res == 0: # success + assert msg == "" + w.swrite(output.outputId) + else: # error + w.swrite(msg) output.ostream.setBlocking(blocking) proc sendStatus*(handle: LoaderHandle; status: uint16) = @@ -142,7 +143,8 @@ proc sendStatus*(handle: LoaderHandle; status: uint16) = inc handle.rstate let blocking = handle.output.ostream.blocking handle.output.ostream.setBlocking(true) - handle.output.ostream.swrite(status) + handle.output.ostream.withWriter w: + w.swrite(status) handle.output.ostream.setBlocking(blocking) proc sendHeaders*(handle: LoaderHandle; headers: Headers) = @@ -150,7 +152,8 @@ proc sendHeaders*(handle: LoaderHandle; headers: Headers) = inc handle.rstate let blocking = handle.output.ostream.blocking handle.output.ostream.setBlocking(true) - handle.output.ostream.swrite(headers) + handle.output.ostream.withWriter w: + w.swrite(headers) handle.output.ostream.setBlocking(blocking) proc recvData*(ps: PosixStream; buffer: LoaderBuffer): int {.inline.} = |