Add trace log for streaming files

main
_ 2020-11-09 16:33:13 +00:00
parent 4d4a46f167
commit 9714794122
2 changed files with 22 additions and 2 deletions

View File

@ -306,6 +306,9 @@ async fn serve_file (
let mut bytes_sent = 0; let mut bytes_sent = 0;
let mut bytes_left = content_length; let mut bytes_left = content_length;
let mark_interval = 200_000;
let mut next_mark = mark_interval;
loop { loop {
let mut buffer = vec! [0u8; 65_536]; let mut buffer = vec! [0u8; 65_536];
let bytes_read: u64 = f.read (&mut buffer).await.unwrap ().try_into ().unwrap (); let bytes_read: u64 = f.read (&mut buffer).await.unwrap ().try_into ().unwrap ();
@ -330,7 +333,10 @@ async fn serve_file (
} }
bytes_sent += bytes_read; bytes_sent += bytes_read;
trace! ("Sent {} bytes", bytes_sent); while next_mark <= bytes_sent {
trace! ("Sent {} bytes", next_mark);
next_mark += mark_interval;
}
//delay_for (Duration::from_millis (50)).await; //delay_for (Duration::from_millis (50)).await;
} }

16
todo.md
View File

@ -1,4 +1,5 @@
- Not working behind Nginx (Works okay behind Caddy) - Add byte counter in `trace!()` macro in the file server
- Not working great behind reverse proxies
- Show file server names in HTML - Show file server names in HTML
- Impl multi-range / multi-part byte serving - Impl multi-range / multi-part byte serving
@ -58,3 +59,16 @@ I tried to figure out the percent encoding and it didn't work.
Maybe Base64 would be better or something? At least it's unambiguous and it Maybe Base64 would be better or something? At least it's unambiguous and it
can go straight from UTF-8 to bytes to ASCII-armored. can go straight from UTF-8 to bytes to ASCII-armored.
## Turtle in Firefox's network debugger
The turtle shows up if Firefox has to wait more than 500 ms till first byte.
Curl says we can download a small file (950 bytes) end-to-end in about 250 ms.
So I think somewhere between Firefox and Caddy, something is getting confused.
Firefox, probably the same as Chromium, doesn't try to buffer entire videos
at once, so I think it purposely hangs the download, and then I'm not sure
what happens.
I might have to build a client that imitates this behavior, since it's hard
to control.